如何在 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);
我试过以下方法:
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);