我想更新我的表,以便将每个值为NULL的列更新为空字符串。
目前我有以下查询,但它只会更新一列,我想将所有NULL列更新为空字符串。
UPDATE table SET column1='' WHERE column1 IS NULL
答案 0 :(得分:21)
您可以通过执行以下操作来使用一个语句更新多个列:
UPDATE table SET column1='', column2='', column3='' WHERE column1 IS NULL
但是,这只会根据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,'')
答案 1 :(得分:2)
您可以将列更新为自身并在那里检查null ...
UPDATE table SET
column1 = ISNULL(column1,''),
column2 = ISNULL(column2,''),
column3 = ISNULL(column3,'')
等。
不需要WHERE子句,因为您希望它在所有记录上运行。
答案 2 :(得分: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 '+@sql
答案 3 :(得分:0)
您无法在标准SQL中动态创建语句。如果没有编程语言的外部帮助,您需要为每一列重复此语句。
答案 4 :(得分: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);
答案 5 :(得分:0)
遗憾的是,这似乎是不可能的。
对于那些想知道为什么实际上需要这样做的人来说,您还没有处理过使用 ODBC 将 filemaker 链接到 mysql。
长话短说,FM 在将所有空字符串发送到 mysql 之前“有帮助地”将它们强制为 null,并在 mysql 列具有非空约束时应用非空约束。
这种行为对于非字符串数据实际上是正确的,因为空意味着零。但它会导致字符串数据出现问题。
由于新列不断添加到表中,因此能够更新所有可以使用空字符串的列而不是空字符串而无需事先知道它们都是什么会很有用。