【问题标题】:SQL Server MERGE with Insert subquery带有插入子查询的 SQL Server MERGE
【发布时间】:2016-01-13 18:14:52
【问题描述】:

我无法让这个复合插入在两个表之间的 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
    ;

谢谢。

【问题讨论】:

  • 为什么不使用子查询作为源代码的一部分?

标签: sql sql-server tsql merge subquery


【解决方案1】:

我认为您应该删除 where 子句中的单引号。

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

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

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

希望对你有用

【讨论】:

  • 非常感谢!以为我在其他地方读到过 SQL Merge 语句中可能不允许子查询。你拯救了我的一天,伙计。
猜你喜欢
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
相关资源
最近更新 更多