T-SQL:如何查询导致具有NULLS的字段列表的表

时间:2017-06-08 18:22:50

标签: sql-server tsql null

我希望在我的小组获得的一组新数据上设置一组数据质量脚本。我想要跟踪的一个问题是维护包含nulls的字段列表。有些字段没有问题,有些字段没有,但我们不想阻止bulk insert,因为我们不允许某些字段null

示例:

SELECT [columns]
FROM [TABLE] T
WHERE [columns] CONTAINS NULLS

2 个答案:

答案 0 :(得分:2)

你可以在函数中使用这样的东西来循环遍历所有列,并查看表中是否有空值的计数。代码是一种蛮力,但它会起作用。

test6.txt

答案 1 :(得分:2)

这是缓慢而丑陋的,但是如果没有从RedGate(等人)购买工具,您可以使用ISNULL(@ column,'PICK ME')来修改它以搜索您的空值...

DECLARE @Query NVARCHAR(MAX), @Column NVARCHAR(100), @Table NVARCHAR(100)
DECLARE @Search NVARCHAR(100)
SET @Search = 'PICK ME'

IF OBJECT_ID('tempdb.dbo.#Results2','U') IS NOT NULL
    DROP TABLE tempdb.dbo.#Results2

CREATE TABLE #Results2(Table_Name VARCHAR(100), Column_Name VARCHAR(100))

DECLARE Col CURSOR FOR
SELECT Table_Name, Column_Name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLLATION_NAME IS NOT NULL
ORDER BY TABLE_NAME, ORDINAL_POSITION

OPEN Col
FETCH NEXT FROM Col INTO @Table, @Column
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @Query = 'IF EXISTS (SELECT * FROM '+QUOTENAME(@Table)+' WHERE '+QUOTENAME(@Column)+'='''+@Search+''')
                    SELECT '''+@Table+''','''+@Column+''''

    INSERT INTO #Results2
    EXEC sp_executesql @Query
    FETCH NEXT FROM Col INTO @Table, @Column
END
CLOSE Col
DEALLOCATE Col

SELECT * FROM #Results2