单个查询中的多列更新

时间:2014-03-28 19:30:53

标签: sql sql-server sql-server-2012

我可以使用单个更新查询更新不同表中的两列。 我陷入了困境:

表1:

case id    client id   created by
1           a          john  
2           b          Mike   
3           c          Raghu
4           b          Mike

表2:

case id    client id     case cost
2           b             5,000
3           j            10,000
4           b             6,000  

问题是,我想在Mike创建的两个案例的表中更新客户端id = d。

我可以通过mike创建的join来获取这些情况,但是也可以通过使用sql join来更新它们吗?

2 个答案:

答案 0 :(得分:1)

一个声明中更多更新的答案是否定的。虽然可以在update语句的from子句中输入多个表,但只能在update关键字后指定一个表。即使你写了一个"可更新的" view(这只是遵循某些限制的视图),这样的更新将失败。
解决这个问题 使用交易冻结:

示例:

    BEGIN TRANSACTION

    update A
    set A.client_id =  'd'
    from table1 A inner join table2 B
    on B.client_id = A.client_id
where a.created_by='mike'

    update B
    set B.client_id = 'd'
    from table2 B inner join table1 A
        on B.client_id = A.client_id
        where a.created_by='mike'


    COMMIT

答案 1 :(得分:0)

可能这样的事情会起作用

UPDATE table1,table2 SET table1.client_id='d',table2.client_id='d'
WHERE table1.client_id=table2.client_id;

因为你提到RDBMS为MSSQL 2012;你只能有一个更新语句。 您可以在另一个答案(OR)中提到的事务块中有多个

创建一个过程并将更新语句包装在那里

create procedure update_table1_table2
as 
begin
UPDATE table1 SET client_id='d' WHERE client_id='b';
UPDATE table2 SET client_id='d' WHERE client_id='b';
end

然后调用您的程序

exec update_table1_table2