如何将列值设置为空,而它们在 TSQL 中为“空”?

J4ce

我尝试了以下方法:

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

我将大量 excel 数据导入到 ssms 中,空值实际上是 varchars。

佐哈尔·佩莱德

基本上,如果您'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);

您可以在 reextester 上看到现场演示。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章