首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有办法将多个更新查询合并到一个查询中吗?

有办法将多个更新查询合并到一个查询中吗?
EN

Stack Overflow用户
提问于 2017-08-28 12:04:36
回答 3查看 484关注 0票数 6

我需要更新各省表中每个省代码的描述信息。我所做的是:

代码语言:javascript
运行
复制
update Provinces
set Description='Mississippi'
where Code = 'MS'

update Provinces
set Description = 'Maryland'
where Code = 'MD'

.... --around 100 more update queries like that.

以这种方式,有重复的代码行,这在我看来不太好。我想知道是否有更好和更专业的方法来完成同样的任务。如有任何帮助或建议,将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-28 12:06:04

你可以用CASE

代码语言:javascript
运行
复制
update Provinces
set Description= CASE code WHEN 'MS' THEN 'Mississippi'
                           WHEN 'MD' THEN 'Maryland' 
                           -- ELSE 'some default value' --otherwise NULL
                 END
where Code IN('MS', 'MD');

另一种方法是创建表变量并使用UPDATE FROM JOIN语法:

代码语言:javascript
运行
复制
DECLARE @t AS (code VARCHAR(10), desc VARCHAR(1000));
INSERT INTO @t(code, desc) VALUES ('MS','Mississippi'), ('MD', 'Maryland');

UPDATE p
SET desc = t.desc
FROM Provinces p
JOIN @t t
  ON p.Code = t.code;
票数 12
EN

Stack Overflow用户

发布于 2017-08-28 12:08:06

使用case表达式的另一种方法是将公共表表达式表值构造函数一起使用并连接到cte,如下所示:

代码语言:javascript
运行
复制
;with ProvinceDescription as (
  select Description, Code
  from (values 
      ('Mississippi','MS')
     ,('Maryland','MD')
    ) v (Description, Code)
)
update p
  set p.Description = pd.Description
from Provinces p
  inner join ProvinceDescription pd
    on p.Code = pd.Code
where p.Description <> pd.Description;  
票数 7
EN

Stack Overflow用户

发布于 2017-08-28 12:09:56

如果正确设置了唯一约束,则可以使用:

代码语言:javascript
运行
复制
INSERT INTO Provinces (Description, Code)
VALUES ('Maryland', 'MD'), ('Mississippi', 'MS')
ON DUPLICATE KEY UPDATE Description=VALUES(Description), Code=VALUES(Code)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45918575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档