Это может быть очень ресурсосберегающей тяжелой операцией, в зависимости от размера таблицы, но это должно сделать это:
Сформировать некоторый 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 ,
http://stackoverflow.com/questions/7791361/sql-to-return-list-of-fields-containing-non-null-data –
_ «У меня есть таблица с 369 столбцами» _ OMG, есть ли у вас когда-либо слышали о [нормализации] (http://en.wikipedia.org/wiki/Database_normalization)? –
Вы уверены, что хотите «список этих столбцов даты со значениями NULL во всех ** строках **»? А не строки, где все столбцы даты имеют NULL, например? Первый из них прост, последний тоже, но много набирается. – NickyvV