Вы хотите, чтобы весь указанный столбец был равен нулю?
;WITH tb(ID,col1,col2,col3,col4,col5,col6,col7,col8,col9)AS(
SELECT 1,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL UNION
SELECT 2,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,NULL UNION
SELECT 3,1,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL UNION
SELECT 4,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
)
SELECT * FROM tb
WHERE COALESCE(col1,col2,col3,col3,col5,col6,col7,col8,col9) IS NULL
возвратит идентификатор = 4
ID col1 col2 col3 col4 col5 col6 col7 col8 col9
----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
4 NULL NULL NULL NULL NULL NULL NULL NULL NULL
Чтобы проверить, какой столбец NULL с динамическим satement:
CREATE TABLE tb(ID INT ,col1 INT ,col2 INT ,col3 INT ,col4 INT ,col5 INT ,col6 INT ,col7 INT ,col8 INT ,col9 INT)
INSERT INTO tb
SELECT 1,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL UNION
SELECT 2,NULL,NULL,NULL,NULL,NULL,NULL,3,NULL,NULL UNION
SELECT 3,1,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL UNION
SELECT 4,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
DECLARE @cols NVARCHAR(max),@sql NVARCHAR(max)
SELECT @cols=ISNULL(@cols+',','')+'('''+c.name+ ''',['+c.name+'])' FROM sys.all_columns AS c WHERE OBJECT_NAME(c.object_id)='tb'
PRINT @cols
SET @sql='
SELECT ID,c.col_title,CASE WHEN c.col_value IS NULL THEN ''NULL NULL'' ELSE ''HAS VALUE'' END AS COMMENT FROM dbo.tb
CROSS APPLY(VALUES'[email protected]+') c(col_title,col_value)'
PRINT @sql
EXEC (@sql)
ID col_title COMMENT
----------- --------- ---------
1 col1 HAS VALUE
1 col2 NULL NULL
1 col3 NULL NULL
1 col4 NULL NULL
1 col5 NULL NULL
1 col6 NULL NULL
1 col7 NULL NULL
1 col8 NULL NULL
1 col9 NULL NULL
1 ID HAS VALUE
2 col1 NULL NULL
2 col2 NULL NULL
2 col3 NULL NULL
2 col4 NULL NULL
2 col5 NULL NULL
2 col6 NULL NULL
2 col7 HAS VALUE
2 col8 NULL NULL
2 col9 NULL NULL
2 ID HAS VALUE
3 col1 HAS VALUE
3 col2 HAS VALUE
3 col3 NULL NULL
3 col4 NULL NULL
3 col5 NULL NULL
3 col6 NULL NULL
3 col7 NULL NULL
3 col8 NULL NULL
3 col9 NULL NULL
3 ID HAS VALUE
4 col1 NULL NULL
4 col2 NULL NULL
4 col3 NULL NULL
4 col4 NULL NULL
4 col5 NULL NULL
4 col6 NULL NULL
4 col7 NULL NULL
4 col8 NULL NULL
4 col9 NULL NULL
4 ID HAS VALUE
вы * у * дать все столбцы в выражении WHERE , – GurV
Вам нужно будет использовать динамический SQL для генерации предложения where автоматически. В противном случае вам не повезло - вам нужно указать его для всех столбцов, которые допускают null. Тем не менее, я не уверен, почему стол будет когда-либо понадобиться 50 столбцов и почему вам нужно будет проверить, является ли какой-либо из них нулевым; я предполагаю, что дизайн таблицы не является оптимальным в первую очередь. – ZLK
Здесь дизайн вступает в игру. Откуда берутся нулевые значения? Почему неизвестно влияет на все 50 столбцов? Если вы не можете принудительно использовать NOT NULL в качестве ограничения столбца, как ваша таблица даже делает 1NF, не говоря уже о 2NF (нормализация). Это таблица фактов или измерений? Какие вопросы ответили на этот вопрос? –