我需要更新各省表中每个省代码的描述信息。我所做的是:
update Provinces
set Description='Mississippi'
where Code = 'MS'
update Provinces
set Description = 'Maryland'
where Code = 'MD'
.... --around 100 more update queries like that.以这种方式,有重复的代码行,这在我看来不太好。我想知道是否有更好和更专业的方法来完成同样的任务。如有任何帮助或建议,将不胜感激。
发布于 2017-08-28 12:06:04
你可以用CASE
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语法:
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;发布于 2017-08-28 12:08:06
使用case表达式的另一种方法是将公共表表达式与表值构造函数一起使用并连接到cte,如下所示:
;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; 发布于 2017-08-28 12:09:56
如果正确设置了唯一约束,则可以使用:
INSERT INTO Provinces (Description, Code)
VALUES ('Maryland', 'MD'), ('Mississippi', 'MS')
ON DUPLICATE KEY UPDATE Description=VALUES(Description), Code=VALUES(Code)https://stackoverflow.com/questions/45918575
复制相似问题