指定する列がすべてnullであることを確認しますか?
;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
戻ります列がダイナミックsatementとNULLである= 4
ID col1 col2 col3 col4 col5 col6 col7 col8 col9
----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
4 NULL NULL NULL NULL NULL NULL NULL NULL NULL
を確認するにはID:
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句を自動的に生成する必要があります。それ以外の場合は、不運になります。ヌルを許可するすべての列に対して指定する必要があります。つまり、なぜテーブルに50列が必要なのかわかりませんし、なぜそれらがnullであるかどうかを確認する必要があるのはなぜですか。私の推測では、テーブルのデザインは最初は最適ではないということです。 – ZLK
これはデザインが活躍する場所です。ヌル値はどこから来ますか?未知数が50列すべてに影響するのはなぜですか?列制約としてNOT NULLを適用できなかった場合、2NF(正規化)はもちろんのこと、テーブルはどのようにして1NFを作成しますか?ファクト表またはディメンション表ですか?この質問からどのような質問に答えましたか? –