我正在尝试使用单个查询更新多个列
这是我的代码:我想更新Employee
表,并且该表在EmployeeCode
列中有多个空值,我必须用新值更新。
update Employee
set EmployeeCode = 26589, EmployeeCode = 26587
where EmployeeID = 'EA45AED9-94A6-E711-AF12-E4029B75E01C'
and EmployeeID = '0A362F00-96A6-E711-AF12-E4029B75E01C';
答案 0 :(得分:2)
两种单独的更新是最简单的方法:
update Employee
set EmployeeCode = 26589
where EmployeeID = 'EA45AED9-94A6-E711-AF12-E4029B75E01C' ;
update Employee
set EmployeeCode = 26587
where EmployeeID = '0A362F00-96A6-E711-AF12-E4029B75E01C';
您可以将其包装在一个交易中,以便它们同时生效。
你可以将它们合并为一个语句:
update Employee
set EmployeeCode = (case when EmployeeID = 'EA45AED9-94A6-E711-AF12-E4029B75E01C'26589 then 26589 else 26587 end)
where EmployeeID in ('EA45AED9-94A6-E711-AF12-E4029B75E01C', '0A362F00-96A6-E711-AF12-E4029B75E01C');
但这似乎没必要。
如果您有两个以上,则可能会建议:
update e
set EmployeeCode = v.EmployeeCode
from Employee e join
(values ('EA45AED9-94A6-E711-AF12-E4029B75E01C', 26589),
('0A362F00-96A6-E711-AF12-E4029B75E01C', 26587)
) v(EmployeeId, EmployeeCode)
on e.EmployeeId = v.EmployeeId;
答案 1 :(得分:1)
使用CASE
声明
UPDATE Employee
SET EmployeeCode = CASE EmployeeID
WHEN 'EA45AED9-94A6-E711-AF12-E4029B75E01C' THEN 26589
ELSE 26587
END
WHERE EmployeeID IN ( 'EA45AED9-94A6-E711-AF12-E4029B75E01C', '0A362F00-96A6-E711-AF12-E4029B75E01C' );
注意:我假设'EA45AED9-94A6-E711-AF12-E4029B75E01C'
映射到26589
代码,如果没有交换值
答案 2 :(得分:1)
分开你的SQL语句
UPDATE Employee
SET EmployeeCode = 26589,
WHERE EmployeeID = 'EA45AED9-94A6-E711-AF12-E4029B75E01C'
UPDATE Employee
SET EmployeeCode = 26587
WHERE EmployeeID = '0A362F00-96A6-E711-AF12-E4029B75E01C';
答案 3 :(得分:0)
如果你真的需要,你可以使用CTE一步完成:
WITH Pairs (code, id)
AS (
SELECT 26589 AS code, 'EA45AED9-94A6-E711-AF12-E4029B75E01C' AS id
UNION ALL
SELECT 26587 AS code, '0A362F00-96A6-E711-AF12-E4029B75E01C' AS id
)
UPDATE Employee set EmployeeID = Pairs.id
FROM Pairs
INNER JOIN Employee ON (pairs.code = Employee .EmployeeCode)
说明:
WITH Pairs (...) AS (...)
部分定义了您需要的代码 - ID对。您可以根据需要在此处使用尽可能多的SELECT
-s。只需保留UNION
- 他们。WITH
之后,您可以更新Employee
表格。您需要做的就是在INNER JOIN
子查询上执行Pairs
。因此,您只会更新那些您想要的行。