【问题标题】:Can you perform more than operation in a T-SQL MERGE section?您可以在 T-SQL MERGE 部分执行更多操作吗?
【发布时间】:2019-06-15 11:04:27
【问题描述】:

我的尝试相当成功,我需要识别和巩固 OUTPUT 列(其中的 #)以及 #of 列真正关联的 MERGE 语句的哪一部分。我只是问我可以在一个 MERGE 条件内执行多项操作吗,如下例所示?

WHEN MATCHED
AND TARGET.ProductName <> SOURCE.ProductName 
OR TARGET.Rate <> SOURCE.Rate

THEN 
UPDATE SET TARGET.ProductName = SOURCE.ProductName, 
TARGET.Rate = SOURCE.Rate 

--MAGIC HERE ??
--CAN I ALSO 
--INSERT  in this same section before I do more in below condition?

WHEN NOT MATCHED BY TARGET THEN 

我已经看到了从 MERGE 语句的 OUTPUT 部分的内容完成的 INSERT 示例,但是我建议的内容是否可以在不使用 OUTPUT 结果中的另一个查询的情况下完成?

【问题讨论】:

  • @Hadi:我相信有接受答案的建议,但这不是强制性的。但是,ChristianProgrammer,如果您希望接受答案,我建议您尽可能接受最好的答案。 Hadi 的回答与您的一致,但深入解释了为什么。理想情况下,这正是我们在此处寻找答案的原因。
  • @halfer 我发表了这条评论,因为用户写了他自己的答案,但没有接受。我的目标不是让我的答案被接受
  • @Hadi,没关系。你的答案看起来很好。我只是在回应您的第一句话(“您必须接受答案”),因为我认为这不正确。尽管我们希望问题作者接受答案,但接受不是强制性的。
  • @halfer 我删除了我的评论,因为用户已经接受了他的回答。当我看到用户没有“知情”徽章时,我正在写这种类型的 cmets

标签: sql sql-server tsql merge ssis


【解决方案1】:

您不能在一个子句中进行多项操作,但您可以从OUTPUT 子句中受益以执行进一步的语句。

基于此Microsoft Documentation:

OUTPUT 子句从受 INSERT、UPDATE、DELETE 或 MERGE 语句影响的每一行返回信息或表达式。这些结果可以返回到处理应用程序,以用于诸如确认消息、归档和其他此类应用程序要求之类的事情。结果也可以插入到表或表变量中。此外,您可以在嵌套的 INSERT、UPDATE、DELETE 或 MERGE 语句中捕获 OUTPUT 子句的结果,并将这些结果插入到目标表或视图中。

以上文章包含许多可以帮助您的示例。

参考文献

【讨论】:

    【解决方案2】:

    不... 一个变量不能在同一个 MATCHED 子句中多次更新。

    【讨论】:

      猜你喜欢
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      相关资源
      最近更新 更多