我必须从许多列中取出NULL值。我一直在做一些研究,但它告诉我,我可以一次完成一个专栏,这需要很长时间。有没有更好的办法?我现在的代码是:
Update table set column1 = 0 where column1 IS NULL
任何帮助或想法都会有所帮助。谢谢,米歇尔
答案 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;