Sql 单查询中的多列更新

Sql 单查询中的多列更新,sql,sql-server,sql-server-2012,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

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

表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创建的两个案例表中的client id=d


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

类似的方法可能会奏效

UPDATE table1,table2 SET table1.client_id='d',table2.client_id='d'
WHERE table1.client_id=table2.client_id;
因为您提到RDBMS为MSSQL 2012;只能有一条update语句。 您可以在另一个答案中提到的事务块中有多个(或)

创建一个过程并将update语句包装在那里,就像

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 

一条语句中的多个更新的答案是否。虽然可以在update语句的from子句中输入多个表,但只能在update关键字后指定一个表。即使您确实编写了一个“可更新”视图(这只是一个遵循某些限制的视图),这样的更新也会失败。
要解决此问题
使用事务块:

例如:

    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

这取决于您使用的数据库。请用数据库标签更新您的问题。我正在使用Sql数据库;那是2012Sql数据库,是MS SQL、MYSQL等吗?SQL Server(包括2012)只允许单个update语句影响单行。因此,您只能在事务中执行此操作。不,在MSSQL 2012中无效。是否使用MSSQL执行操作?好的,答案是在它被标记之前给出的。