SQL Server - 使用子查询更新多个表

时间:2015-11-19 10:18:25

标签: sql sql-server sql-update

我尝试根据我的另一个子查询更新几个表。 语法是什么?

我试过了:

;with sub_query as (....)
update T 
set X = Y 
from table1 T 
inner join sub_query on ...

update T 
set X = Y 
from table2 T 
inner join sub_query on ...

但我在更新table2查询中遇到错误:

  

无效的对象名称'sub_query'。

更新第二个查询的语法应该是什么?我不想再次编写sub_query,因为这是一个非常复杂的查询。

谢谢!

2 个答案:

答案 0 :(得分:0)

CTE table仅在创建后使用一次!您可以使用表变量或临时表而不是它。像这样:

CREATE @sub_query (...)
INSERT INTO sub_query ....

UPDATE ...

答案 1 :(得分:-1)

使用视图:

CREATE VIEW view_sub_query .....

UPDATE T SET X=Y FROM table1 T INNER JOIN view_sub_query ON ...
UPDATE T SET X=Y FROM table2 T INNER JOIN view_sub_query ON ...

如果必须在很多地方使用它,请使用表函数:

CREATE FUNCTION fun_sub_query .....

UPDATE T SET X=Y FROM table1 T INNER JOIN fun_sub_query ON ...
UPDATE T SET X=Y FROM table2 T INNER JOIN fun_sub_query ON ...