2011-08-08 50 views

回答

13

你可以做这样的事情更新一个语句多列:

UPDATE table SET column1='', column2='', column3='' WHERE column1 IS NULL 

无论其thsi将只更新基于WHERE子句。

对于你想要做的事情,你需要单独的陈述。

UPDATE table SET column1='' WHERE column1 IS NULL 
UPDATE table SET column2='' WHERE column2 IS NULL 
UPDATE table SET column3='' WHERE column3 IS NULL 

编辑试试这个:

UPDATE table SET column1= IfNull(column1,''), column2= IfNull(column2,'') , column3= IfNull(column3,'') 
+0

是的,这就是为什么我给了他两个选择。 –

+1

我想每个人都有同样的解决方案...我希望有更多的“自动”的东西,但这个多个查询交易可能是唯一的方式有点臭... – Jona

+0

@MOTO:什么“有点臭”是需要设置所有NULL列都是空字符串,因为前端可能不能很好地处理NULL。 – Tim

0

不能动态地创建标准SQL的声明。如果没有编程语言的外部帮助,您需要为每列重复使用此语句。

0

您需要指定要更改的列。所以,如果你的表有四列,你需要这样的多个查询:

UPDATE table SET column1 = '' WHERE column1 IS NULL; 
UPDATE table SET column2 = '' WHERE column2 IS NULL; 
UPDATE table SET column3 = '' WHERE column3 IS NULL; 
UPDATE table SET column4 = '' WHERE column4 IS NULL; 

它变得更容易一些,如果你只是想所有列设置为提供的只是其中的一列是NULL一个空字符串,但这可能不是你想要什么:

UPDATE table SET column1 = '', column2 = '', column3 = '', column4 = '' 
WHERE (column1 IS NULL 
OR column2 IS NULL 
OR column3 IS NULL 
OR column4 IS NULL); 
2

您可以更新一列本身并检查空那里......

UPDATE table SET 
column1 = ISNULL(column1,''), 
column2 = ISNULL(column2,''), 
column3 = ISNULL(column3,'') 

等。

不需要WHERE子句,因为您希望它在所有记录上运行。

+0

这意味着你知道每个列的名称,我认为OP正在寻找一种方法来自动执行它。 –

1

其实你可以做这样的事情

DECLARE @sql varchar(max)='' 

select @sql= @sql+''+ c.name + '= CASE WHEN ' +c.name+'=''''THEN NULL ELSE ' +c.name+' end, 
' 
from sys.tables t 
JOIN sys.columns c 
ON t.object_id = c.object_id 
WHERE t.object_id = 1045578763 -- Your object_id table 


PRINT 'UPDATE <TABLE> 
     SET '[email protected] 
相关问题