【问题标题】:How to keep track of the ID relationships when using an SQL Server MERGE statement?使用 SQL Server MERGE 语句时如何跟踪 ID 关系?
【发布时间】:2016-03-31 23:18:06
【问题描述】:

我正在使用 MERGE 语句将产品从我们的 POS 中“推送”到我们的网站。但是,我需要能够跟踪我的 MERGE 语句使用的源表和目标表中的 ID...基本上,我想生成一个跟踪 tblA ID tblB ID 关系的表。向您展示会更容易:

http://sqlfiddle.com/#!3/bc8b40/3/0

我遇到的问题是我不知道如何在 tblMappings 表中记录 source.ID(我只是简单地尝试了source.ID,但这没有用)。有人知道我该怎么做吗?

一个要求:查询需要能够通过 PHP SQLSRV 驱动程序运行。

提前致谢!

【问题讨论】:

  • Source.ID 应该确实有效。当您使用Source.ID 而不是DELETED.ID 时,您会看到什么?
  • 应该可以工作:sqlfiddle.com/#!3/da944/1
  • 哈!它有效...也许我在尝试时打错了...感谢您的验证!

标签: sql sql-server tsql sql-server-2008-r2


【解决方案1】:

我想我对source.ID 的想法是正确的,但很明显,当我尝试它时,我在某个地方出现了拼写错误——因为它现在工作得很好!谢谢@cha

MERGE tblTarget AS target
USING (
  SELECT
    ID,
    SKU,
    Name
  FROM tblSource
) AS source (
  ID,
  SKU,
  Name
)
ON (target.SKU = source.SKU)
WHEN MATCHED THEN
  UPDATE SET
      Name = source.Name
WHEN NOT MATCHED THEN
  INSERT (
    SKU,
    Name
  )
  VALUES (
    source.SKU,
    source.Name
  )
OUTPUT
  $ACTION ChangeType,
  COALESCE(Inserted.SKU, Deleted.SKU) SKU,
  /* The source table's alias works just fine apparently... */
  source.ID SRC_ID,
  Inserted.ID TGT_ID,
  GETUTCDATE() Last_Updated
INTO tblMappings;

SELECT *
FROM tblMappings;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-13
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2011-08-14
    • 2018-03-11
    相关资源
    最近更新 更多