Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 一次更新多个字段_Sql - Fatal编程技术网

Sql 一次更新多个字段

Sql 一次更新多个字段,sql,Sql,我试图在整个表格中找到单词true的所有实例,并将它们改为“1”。为了节省将来的时间,我希望能够一次更改每个列,并且只运行一个查询 更新myTable 设置字段1、字段2、字段3=1 其中field1、field2、field3='true' 这就是我正在考虑做的 您当前的语法很接近。您需要为每个字段指定值: UPDATE MyTable SET Field1 = CASE WHEN Field1 = 'True' THEN 1 ELSE Field1 END, Field2 = C

我试图在整个表格中找到单词true的所有实例,并将它们改为“1”。为了节省将来的时间,我希望能够一次更改每个列,并且只运行一个查询

更新myTable 设置字段1、字段2、字段3=1 其中field1、field2、field3='true'


这就是我正在考虑做的

您当前的语法很接近。您需要为每个字段指定值:

UPDATE MyTable
SET
   Field1 = CASE WHEN Field1 = 'True' THEN 1 ELSE Field1 END,
   Field2 = CASE WHEN Field2 = 'True' THEN 1 ELSE Field2 END,
   Field3 = CASE WHEN Field3 = 'True' THEN 1 ELSE Field3 END

这将检查每一行,并根据需要更新这些字段。

不,没有一种简单的方法可以像您所写的那样做到这一点

update mytable
set
field1 = case when field1='true' then 1 else field1 end,
field2 = case when field2='true' then 1 else field2 end,
field3 = case when field3='true' then 1 else field3 end
where 
    field1 ='true' or field2='true' or field3='true'
您可以使用以下方法动态循环列:

select name from sys.columns
  where object_id=(
  select object_id from sys.objects where name like 'myTable '
)
并逐一核对


它需要一些编码,执行时间可能不是最好的,但它可以避免您编写大量代码,主要的优点是,您可以通过更改名称来更改表。

您使用的是哪些RDBMS,例如mySql/Oracle/等?他没有说where ALL where true…只是用一个“1”@Gerrat-很好的捕获来替换每个为true的RDBMS,我没看到。我会更新的。这也不行。。。如果字段2已为0。。。ie field1='true'和Field2&3为0,则不会修复field1。您可能希望在field1='true'或Field2='true'或Field3='true'+1处添加字段1以捕获它early@josbo,您可能不需要where子句,因此这是一个副本。。。但是where子句将保存一些不必要的更新。。。对于不需要更新的行,使用then 2的两行应为then 1