如何在 SQL 中的 'null' 位置将列值设置为 null?

How do I set column values to null where they are 'null' in TSQL?

我试过以下方法:

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

我导入了很多excel数据到ssms中,空值实际上是varchars。

SELECT NULLIF (ColA, 'NULL') AS ColA

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

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

NULLIF 函数将 return NULL 如果它的两个参数相同,否则第一个参数相同。

如果您想为多个 table 动态执行此操作,您可以这样做:

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.