带有Insert子查询的SQL Server MERGE

时间:2016-01-13 18:14:52

标签: sql sql-server tsql merge subquery

我无法在两个表之间的MERGE语句中使用此复合插件(忽略匹配条件,我知道它的不良做法)。我遇到的问题是在目标表中填写ServerId字段。 Team字段填充正常但所有行都具有ServerId的空值。我在网上找不到一个例子,所以我希望有人可以提供帮助。我似乎没有任何语法错误,我知道Source表中的'ServerName'列填充了所有行。

    MERGE ApplicationTeams AS Target
    USING TempApplicationTeams AS Source
    ON (Target.ServerId = (SELECT ID from Servers WHERE Name='Source.ServerName') AND Target.Team = Source.Team)
    WHEN MATCHED THEN
    UPDATE SET Target.Team = Target.Team
    WHEN NOT MATCHED BY TARGET THEN
    INSERT (ServerId, Team) VALUES((SELECT ID from Servers WHERE Name='Source.ServerName'), Source.Team)
    WHEN NOT MATCHED BY SOURCE THEN
    DELETE
    ;

感谢。

1 个答案:

答案 0 :(得分:2)

我认为你应该删除 where clausule上的单个quoutes。

你写道:  (来自Servers WHERE Name ='Source.ServerName'的SELECT ID)

但我认为你应该这样写:  (来自Servers WHERE Name = Source.ServerName的SELECT ID)

并确保 select id 仅返回一行,否则语句将失败

我希望它会有用