如何更新SQL Server中的多个列?

时间:2017-10-02 14:15:57

标签: sql sql-server

我正在尝试使用单个查询更新多个列

这是我的代码:我想更新Employee表,并且该表在EmployeeCode列中有多个空值,我必须用新值更新。

update Employee 
set EmployeeCode = 26589, EmployeeCode = 26587 
where EmployeeID = 'EA45AED9-94A6-E711-AF12-E4029B75E01C' 
  and EmployeeID = '0A362F00-96A6-E711-AF12-E4029B75E01C';

4 个答案:

答案 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。因此,您只会更新那些您想要的行。