在SQL中更新多个记录

hhh*_*112 11 sql sql-server sql-update

如何使用SQL在单个语句中更新多个记录?:

UPDATE records
   SET name='abc' where id=3,
   SET name='def' where id=1
Run Code Online (Sandbox Code Playgroud)

Jos*_*tos 16

您可以简单地将更新与案例陈述相结合

UPDATE records
   SET name =
     CASE
       WHEN id = 3 THEN 'abc'
       WHEN id = 1 THEN 'def'
       ELSE name
     END
Run Code Online (Sandbox Code Playgroud)

  • 在大多数情况下,它不会改变任何东西,但想象一下更新时会触发所有已更改的行到另一个表... (5认同)
  • 我认为你应该有一个`where`,否则它将对表中的所有记录进行更新. (2认同)

Guf*_*ffa 16

只需几条记录,您就可以使用:

update records
set name = case id
  when 1 then 'def'
  when 3 then 'abc'
end
where id in (1, 3)
Run Code Online (Sandbox Code Playgroud)

更灵活的是创建一个可以加入更新的结果:

update r
set name = x.name
from records r
inner join (
  select id = 1, name = 'abc' union all
  select 3, 'def' union all
  select 4, 'qwe' union all
  select 6, 'rty'
) x on x.id = r.id
Run Code Online (Sandbox Code Playgroud)

  • 为什么选择downvote?如果你不解释你认为错的是什么,它就无法改善答案. (2认同)

Mar*_*ith 5

;WITH vals(id, name)
     AS (SELECT 3,'abc'
         UNION ALL
         SELECT 1,'def')
UPDATE r
SET    name = vals.name
FROM   records r
       JOIN vals
         ON vals.id = r.id  
Run Code Online (Sandbox Code Playgroud)