更新表以将空值设置为NULL的最快方法?

时间:2014-03-11 22:01:31

标签: sql sql-server

我有一张表,并且在几个列中都有空白值,散布在整个地方。

我想替换''用NULL。

最快的方法是什么?有没有我不知道的伎俩?

3 个答案:

答案 0 :(得分:2)

update <table name> set <column 1> = case when <column 1> = '' then null else <column 1> end, <column 2> = case when <column 2> = '' then null else <column 2> end

您可以添加尽可能多的行。不需要where子句(除非你有大量的数据 - 那么你可能想要添加一个where子句,将其限制为在你检查的每个列中都有空值的行)

答案 1 :(得分:1)

如果你有很多专栏并且你不想手动编写SQL,你可以使用Information_Schema.Columns视图为你生成SQL ...

DECLARE @Table AS Varchar(100)
SET @Table = 'Your Table'

SELECT 'UPDATE ' + @Table + ' SET ' + QUOTENAME(Column_Name)
      + ' = NULL WHERE ' + QUOTENAME(Column_Name) + ' = '''''
FROM Information_Schema.Columns
WHERE Table_Name = @Table
AND Data_Type IN ( 'varchar', 'nvarchar' )

然后只需复制结果集并在新的查询窗口中运行...

答案 2 :(得分:0)

我是这样做的:

DECLARE @ColumnNumber INT
DECLARE @FullColumnName VARCHAR(50)
DECLARE @SQL NVARCHAR(500)

SET @ColumnNumber = 0

WHILE (@ColumnNumber <= 30)
      BEGIN
            SET @FullColumnName = 'Column' + CAST(@ColumnNumber AS VARCHAR(10))

            SET @SQL = 'UPDATE  [].[].[] SET ' + @FullColumnName + ' = NULL WHERE ' + @FullColumnName + ' = '''''

            EXECUTE sp_executesql
                @SQL;

            SET @ColumnNumber = @ColumnNumber + 1
      END