如何将列值设置为null,它们是“null”'在TSQL?

时间:2018-03-28 13:42:28

标签: sql tsql null data-cleaning

我尝试过以下方法:

select 'update dbo.tableName set ' + sys.columns + ' = null where ' + sys.columns + ' = 'NULL'' from dbo.tableName

我将大量excel数据导入ssms,而null值实际上是varchars。

2 个答案:

答案 0 :(得分:1)

基本上,如果您有多个列在同一个表中的多个不同行中以'NULL'作为字符串文字,那么最好这样:

UPDATE TableName
SET Col1 = NULLIF(Col1, 'NULL'),
    Col2 = NULLIF(Col2, 'NULL'),
    Col3 = NULLIF(Col3, 'NULL')
WHERE 'NULL' IN(Col1, Col2, Col3)

NULLIF函数如果两个参数相同则返回NULL,否则返回第一个参数。

如果要为多个表动态执行此操作,可以执行以下操作:

DECLARE @SQL nvarchar(max) = '';

SELECT  @SQL += 'UPDATE '+ TABLE_NAME + -- Update clause
        STUFF( -- Set clause start
        (
            SELECT ',' + COLUMN_NAME +  '= NULLIF('+ COLUMN_NAME +', ''NULL'')'
            FROM Information_schema.Columns C
            WHERE C.TABLE_NAME = T.TABLE_NAME
            FOR XML PATH('')    
        ), 1, 1, ' SET ') + -- Set clause end
        ' WHERE ''NULL'' IN(' + -- Where clause start
        STUFF(
        (
            SELECT ','+ COLUMN_NAME
            FROM Information_schema.Columns C
            WHERE C.TABLE_NAME = T.TABLE_NAME
            FOR XML PATH('')    
        ),1, 1, '')+ ');' -- Where clause end
FROM Information_schema.Tables T;

EXEC(@SQL);

You can see a live demo on rextester.

答案 1 :(得分:0)

SELECT NULLIF (ColA, 'NULL') AS ColA