31

我正在使用 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”。

错误信息是什么意思?

4

2 回答 2

52

您不能在单个语句中更新多个表,但是您收到的错误消息是由于别名,您可以试试这个:

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
于 2013-02-27T15:36:38.993 回答
21

如果您只影响一个表,则可以使用联接进行更新,如下所示:

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

但是您正在尝试使用连接多个表的更新语句来影响多个表。这是不可能的。

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

但这是一个 hacky 客厅技巧,使用事务和多次更新,它更直观。

于 2013-02-27T15:40:57.017 回答