Sqlite 如何将所有空列更新为空字符串?

Sqlite 如何将所有空列更新为空字符串?,sqlite,Sqlite,我想更新我的表,以便将值为NULL的每一列更新为空字符串 UPDATE table SET column1='' WHERE column1 IS NULL 目前我有以下查询,但它只会更新一列,我想将所有为NULL的列更新为空字符串 UPDATE table SET column1='' WHERE column1 IS NULL 通过执行以下操作,可以使用一条语句更新多个列: UPDATE table SET column1='', column2='', column3='' WHERE

我想更新我的表,以便将值为NULL的每一列更新为空字符串

UPDATE table SET column1='' WHERE column1 IS NULL
目前我有以下查询,但它只会更新一列,我想将所有为NULL的列更新为空字符串

UPDATE table SET column1='' WHERE column1 IS NULL

通过执行以下操作,可以使用一条语句更新多个列:

UPDATE table SET column1='', column2='', column3='' WHERE column1 IS NULL
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;
但是,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
编辑并尝试以下操作:


不能在标准SQL中动态创建语句。如果没有编程语言的帮助,您需要对每一列重复此语句。

您需要指定要更改的列。因此,如果您的表有四列,则需要进行如下多个查询:

UPDATE table SET column1='', column2='', column3='' WHERE column1 IS NULL
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);

您可以将列更新为自身并在其中检查null

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


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

实际上您可以这样做

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

遗憾的是,这似乎是不可能的

对于那些想知道为什么需要这样做的人,您还没有使用ODBC将filemaker链接到mysql

长话短说,FM在将所有空字符串发送到mysql之前将其强制为null,并在mysql列具有NOTNULL约束时应用非空约束

这种行为对于非字符串数据实际上是正确的,因为空表示零。但它会导致字符串数据出现问题


由于新列不断被添加到表中,因此,如果能够更新所有可以接受空字符串的列,而不必事先知道它们都是什么,这将非常有用。

是的,这就是为什么我给了他两个选项。我想每个人都有相同的解决方案。。。我本来希望有更自动化的东西,但这种多查询处理可能是唯一有点糟糕的方式…@Moto:什么样的糟糕是需要将所有空列设置为空字符串,因为前端可能不能很好地处理空字符串?请看我的编辑,看起来你可以使用IfNull函数来完成这项工作。哦,太完美了!ifnull是freeking sweet!事实上,我在做一个插入,我不知道如果列为null,如何只插入空字符串,这样就解决了我的问题!:感谢您现在尝试的解决方案…:这意味着您知道每一列的名称,我认为OP正在寻找一种自动完成的方法。