2014-01-23 2 views
-1

У меня есть таблица в SQL Server с 369 столбцами.Как получить список всех столбцов даты, которые имеют «NULL» во всех строках

Из этих 369, 127 столбцов имеют тип date, а некоторые из этих 127 столбцов даты имеют значения null во всех строках.

Как получить список этих столбцов date с значениями NULL во всех строках?

+0

http://stackoverflow.com/questions/7791361/sql-to-return-list-of-fields-containing-non-null-data –

+13

_ «У меня есть таблица с 369 столбцами» _ OMG, есть ли у вас когда-либо слышали о [нормализации] (http://en.wikipedia.org/wiki/Database_normalization)? –

+0

Вы уверены, что хотите «список этих столбцов даты со значениями NULL во всех ** строках **»? А не строки, где все столбцы даты имеют NULL, например? Первый из них прост, последний тоже, но много набирается. – NickyvV

ответ

0

Это может быть очень ресурсосберегающей тяжелой операцией, в зависимости от размера таблицы, но это должно сделать это:

Сформировать некоторый SQL:

select 
    TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, column_name, DATA_TYPE, IS_NULLABLE, 
    cmd = 'case when count(*)=sum(case when [' + COLUMN_NAME + '] is null then 1 else 0 end) then 1 else 0 end as [' + COLUMN_NAME + '__isAllNulls],' 
from information_schema.columns 
where 1=1 
    and DATA_TYPE like '%date%' 
    and TABLE_NAME = '<yourtablename>' 

затем написать выберите:

select 
    <paste CMD from above results> 
from <yourtablename> 

EDIT2: образец окончательного запроса после вставки сформированной колонки CMD будет выглядеть так:

select 
    case when count(*)=sum(case when [DateAdded] is not null then 1 else 0 end) then 1 else 0 end as [DateAdded__isAllNulls], 
    case when count(*)=sum(case when [DateModified] is null then 1 else 0 end) then 1 else 0 end as [DateModified__isAllNulls], 
    case when count(*)=sum(case when [DateClosed] is null then 1 else 0 end) then 1 else 0 end as [DateClosed__isAllNulls] 
from yourtable 

Результат должен быть что-то вроде:

DateAdded__isAllNulls DateModified__isAllNulls DateClosed__isAllNulls 
1      0       0 

EDIT: Простой min() или max() бы лучше, чем мой case when count(*)=sum(case ... как @Damien_the_Unbeliever предложил в своем комментарии, но вы можете использовать свой код для создания SQL ,

+0

1 = 1 в месте где это не нужно. – Jade

+0

Спасибо, я выполнил первый запрос, и он дал мне следующий результат: – user3227041

+0

Спасибо, я выполнил первый запрос, и он дал мне следующий результат: TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME DATA_TYPE IS_NULLABLE cmd. Я dndnt получаю то, что вы хотите, чтобы я сделал со вторым «выберите <вставить CMD из приведенных выше результатов> из ". Другая проблема заключается в том, что эти столбцы полей даты хранятся в таблице как тип данных varchar – user3227041

Смежные вопросы