具有2个以上表的SQL MERGE语句

时间:2015-08-22 09:56:20

标签: sql-server stored-procedures merge

Table 1
Id Name Address


Table 2
Id Company Salary

Table3
Id Name Address Company Salary Age Sex
  

我想在单个MERGE语句中合并这些表,Is This   可能??

MERGE table1 AS tg1
MERGE table2 AS tg2
USING (SELECT Id ,Name ,Address FROM Table3) AS sr
ON tg1.Id = sr.Id and tg2.Id = sr.Id
WHEN MATCHED (tg1.Id =sr.Id) then DELETE
WHEN MATCHED (tg2.Id =sr.Id) then UPDATE SET tg2.Company = 'MyCompany'+sr.Company
and so on..
  

我是否需要为此类MERGE使用其他关键字   声明,或者我需要use两个不同的MERGE声明   此

2 个答案:

答案 0 :(得分:1)

Merge只能有一个目标表。

但你可以使用这样的东西:

DECLARE @T TABLE(Id INT);

MERGE table2 AS tg2
USING (SELECT Id, Name, Address, Company FROM Table3) AS sr
ON and tg2.Id = sr.Id
WHEN MATCHED THEN
    UPDATE SET tg2.Company = 'MyCompany' + sr.Company
OUTPUT tg2.Id INTO @T;

DELETE table1
WHERE Id in (SELECT Id
                 FROM @T);

OUTPUT也可以返回 $ action ,这样您就可以根据需要区分DELETE / INSERT / UPDATE。 您甚至可以在MERGE之前使用CTE并准备源表以避免MERGE中的复杂条件。

答案 1 :(得分:0)

您需要两个MERGE语句。一个用于更改table1中的数据,另一个用于更改table2中的数据。