我尝试过以下方法:
select 'update dbo.tableName set ' + sys.columns + ' = null where ' + sys.columns + ' = 'NULL'' from dbo.tableName
我将大量excel数据导入ssms,而null值实际上是varchars。
答案 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);
答案 1 :(得分:0)
SELECT NULLIF (ColA, 'NULL') AS ColA