将“NULL”字符串更新为实际的 NULL 值

Jua*_*lez 6 null sql-server

我有一个包含 NULL 值的表,但问题是某些值实际上是字符串“NULL”而不是实际的 NULLS,因此当您尝试类似

where date is null
Run Code Online (Sandbox Code Playgroud)

它不会返回具有“NULL”字符串的字段。

我需要做的是运行整个表的更新,将所有字符串“NULLS”转换为实际的 NULL 值。“NULL”字符串出现在表的所有列中,因此需要更新的不仅仅是 1 列。我不确定如何处理这种情况。我想我可能需要使用循环,因为我有很多列,但同样可能有一个简单的解决方案而不必使用循环。解决此问题的最佳方法是什么?

Aar*_*and 8

DECLARE @sql NVARCHAR(MAX);

SET @sql = N'';

SELECT @sql = @sql + '
  ' + QUOTENAME(name) + ' = CASE
  WHEN ' + QUOTENAME(name) + ' = ''NULL'' THEN NULL ELSE '
  + QUOTENAME(name) + ' END,'
FROM sys.columns
WHERE [object_id] = OBJECT_ID('dbo.YourTableName')
AND system_type_id IN (35,99,167,175,231,239);

SELECT @sql = N'UPDATE dbo.YourTableName SET ' + LEFT(@sql, LEN(@sql)-1) + ';';

PRINT @sql;
--EXEC sp_executesql @sql;
Run Code Online (Sandbox Code Playgroud)