Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server与插入子查询合并_Sql_Sql Server_Tsql_Merge_Subquery - Fatal编程技术网

SQL Server与插入子查询合并

SQL Server与插入子查询合并,sql,sql-server,tsql,merge,subquery,Sql,Sql Server,Tsql,Merge,Subquery,我很难在两个表之间的MERGE语句中使用这个复合插入。忽略when匹配条件,我知道这是一个糟糕的做法。我遇到的问题是要填充目标表中的ServerId字段。团队字段填充良好,但所有行的ServerId值都为空。我在网上找不到这样的例子,所以我希望有人能帮助我。我似乎没有任何语法错误,而且我知道源表中的“ServerName”列已为所有行填充 MERGE ApplicationTeams AS Target USING TempApplicationTeams AS Source

我很难在两个表之间的MERGE语句中使用这个复合插入。忽略when匹配条件,我知道这是一个糟糕的做法。我遇到的问题是要填充目标表中的ServerId字段。团队字段填充良好,但所有行的ServerId值都为空。我在网上找不到这样的例子,所以我希望有人能帮助我。我似乎没有任何语法错误,而且我知道源表中的“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
    ;

谢谢。

我想你应该把where条款上的单条线路去掉

你写道: 从Name='Source.ServerName'所在的服务器中选择ID

但我认为你应该写下: 从Name=Source.ServerName的服务器中选择ID

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


我希望它会有用

非常感谢!我想我在其他地方读到过,可能在SQL合并语句中不允许使用子查询。你救了我一天,伙计。你为什么不把子查询作为源代码的一部分呢?