Hay más de 100 columnas en mi tabla y todas las columnas son anulables. Necesitamos encontrar qué columna no tiene un valor nulo. Esto está en SQL Server.

-2
Guru vyas V 16 ago. 2017 a las 23:23

2 respuestas

La mejor respuesta

Esto debería hacerlo

SET NOCOUNT ON;

-- populate table
create table my_test_table
(
    foo1 int,
    foo2 int,
    foo3 int,
    foo4 int,
    foo5 int
)

INSERT INTO my_test_table
select 1,2,3,4,5

INSERT INTO my_test_table
select 1,2,null,4,5

INSERT INTO my_test_table
select 1,2,3,4,null

INSERT INTO my_test_table
select 1,null,3,4,null

 -- Actual query needed for question
declare @columns table
(
    ident int identity(1,1),
    column_name varchar(255)
)

INSERT INTO @columns (column_name)
    SELECT c.[name] 
    FROM sys.columns c
    INNER JOIN sys.objects o ON (c.object_id = o.object_id)
    WHERE o.[name] = 'my_test_table'
    ORDER BY c.column_id

declare @table_count int = (select COALESCE(count(ident),0) from @columns)
declare @counter int = 1

declare @column_name varchar(255)
declare @sql nvarchar(max) = ''

while (@table_count > 0 AND @counter <= @table_count)
BEGIN
    select @column_name = column_name
    from @columns
    where ident = @counter

    set @sql += ', count(' + @column_name + ') as [' + @column_name + '_total]'

    set @counter += 1 
END

exec('select count(*) as total' + @sql + ' from my_test_table')

Asegúrese de cambiar el nombre de "my_test_table" por el nombre de la tabla.

Resultado

total   | foo1_total  |foo2_total    |foo3_total   |foo4_total   |foo5_total
--------+-------------+--------------+-------------+-------------+-----------
4       |  4          | 3            | 3           | 4           | 2

Donde el total de la columna no coincide con el total (primera columna), entonces tiene algunos NULL.

PRUEBA: http://rextester.com/AVB29103

0
marc_s 17 ago. 2017 a las 05:09
  1. Ejecute esta consulta sp_help Your_Table, le dará una lista de nombres de columna
  2. Abra Excel, pegue los nombres de las 100 columnas en la columna A, escriba este código en la columna B:

    = "recuento (" & A1 & ") '" & A1 & "'," Luego inserte su consulta nuevamente en SQL.

Escribe tu consulta con 100 columnas como esta

select 
count(ID) 'ID',
...
count(Address) 'Address'
from Your_Table
  1. Los valores nulos no se contarán, por lo que si tiene count ()> 0, eso significa que tiene un valor en esa columna, puede continuar con su tarea.

Gracias.

0
Javlon Ismatov 16 ago. 2017 a las 20:42