更新使用INNER JOIN在SQL Server中的多个表[复制](Update multiple

2019-07-20 16:10发布

这个问题已经在这里有一个答案:

  • 如何更新SQL Server 2005中一个语句两个表? 8个回答

我使用的是SQL Server和尝试使用SQL一次更新多个表用一个查询:

下面的查询:

update table1
set A.ORG_NAME =  @ORG_NAME, B.REF_NAME = @REF_NAME
from table1 A, table2 B
where B.ORG_ID = A.ORG_ID
and A.ORG_ID = @ORG_ID

提供错误信息:

多部分标识符“A.ORG_NAME”不能被约束。

什么是错误讯息是什么意思?

Answer 1:

你不能在一个语句更新更是一个表,但是你得到的错误信息是因为别名,你可以试试这个:

BEGIN TRANSACTION

update A
set A.ORG_NAME =  @ORG_NAME
from table1 A inner join table2 B
on B.ORG_ID = A.ORG_ID
and A.ORG_ID = @ORG_ID

update B
set B.REF_NAME = @REF_NAME
from table2 B inner join table1 A
    on B.ORG_ID = A.ORG_ID
    and A.ORG_ID = @ORG_ID

COMMIT


Answer 2:

您可以通过加入更新,如果你只影响一个表是这样的:

UPDATE table1 
SET table1.name = table2.name 
FROM table1, table2 
WHERE table1.id = table2.id 
AND table2.foobar ='stuff'

但是,你正在尝试影响与对多个表的连接更新语句的多个表。 这是不可能的。

然而,在一个语句更新两个表实际上是可能的,但需要创建使用包含两个要更新的表一个UNION视图。 然后,您可以更新视图,然后将更新基础表。

SQL连接

但是,这是一个非常哈克店招,使用事务和多次更新,它更加直观。



文章来源: Update multiple tables in SQL Server using INNER JOIN [duplicate]