SQL NULL出于多个列

时间:2012-02-29 03:04:09

标签: sql-server sql-server-2008 sql-server-2005

我必须从许多列中取出NULL值。我一直在做一些研究,但它告诉我,我可以一次完成一个专栏,这需要很长时间。有没有更好的办法?我现在的代码是:

    Update table set column1 = 0 where column1 IS NULL 

任何帮助或想法都会有所帮助。谢谢,米歇尔

4 个答案:

答案 0 :(得分:2)

你可能想要这样的东西。

  

更新表集column1 = COALESCE(column1,0),column2 = COALESCE(column2,0)其中column1为IS NULL或column2为IS;

COALESCE函数将使用非空的第一个数字值。这意味着如果column1为null,则使用0。但是如果column1为null,则使用0。

OR语句允许您返回column1或column2中具有null的任何行,并相应地更新它们。

答案 1 :(得分:1)

我没有SSMS实例,或者我在附近工作的数据库(我刚刚重新安装了我的盒子),但这是一个很好的时间(少数几个)使用游标(因为这似乎是一次性的要求)。如果您在此处收到语法错误,请原谅我 - 如果有人看到错误,请随时编辑:)

DECLARE @sql NVARCHAR(MAX);
DECLARE @colName NVARCHAR(MAX);
DECLARE my_cur CURSOR FOR
SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('myTableName') AND name IN ('list', 'of', 'columns', 'you', 'care', 'about'); 

OPEN my_cur;

FETCH NEXT FROM my_cur INTO @colName;

WHILE @@FETCH_STATUS = 0 BEGIN    
    SET @sql = 'Update myTableName set ' + @colName +' = 0 where ' + @colName + ' IS NULL';
    EXEC sp_executesql @sql;
    FETCH NEXT FROM my_cur INTO @colName;
END

CLOSE my_cur;
DEALLOCATE my_cur;

答案 2 :(得分:0)

如果我理解你,你想从跨越许多不同列的表中删除所有空值?如果审核不是问题,那么你可以这样做:

UPDATE [TABLE]
SET Column1 = 
    CASE 
        WHEN Column1 IS NULL THEN 0
        ELSE Column1
    END,
    Column2 = 
    CASE
        WHEN Column2 IS NULL THEN 0
        ELSE Column2
    END, ....

答案 3 :(得分:0)

您可以使用ISNULL选项

UPDATE table
   SET column1 = ISNULL(column1, 0)
      ,column2 = ISNULL(column2, 0)
 WHERE column1 IS NULL 
    OR column2 IS NULL;