【问题标题】:How to generate unique code in INSERT inside MERGE?如何在 MERGE 内的 INSERT 中生成唯一代码?
【发布时间】:2017-06-28 08:59:02
【问题描述】:

在目标表中有一个PK 列usr_cd,它在源表中不存在。因此,在从源插入目标时,我想生成一个唯一的代码。当我使用MERGE 语句时,如何实现这一点?

以下选项尝试失败:

  1. 序列对象:不能在MERGE内部使用。
  2. SP 调用:无法在 MERGE 中的 INSERT 中执行 SP。
  3. 函数调用:无济于事,因为我无法在 UDF 中使用序列对象。此外,如果我在表中存储一个唯一值,我将无法在 UDF 中进行更新。
  4. 在源表中添加代码:不能使用,因为有些记录会被更新,有些会被插入,因此会破坏顺序。

将默认值添加到目标表是一种选择,但我想避免这种情况。

让我知道在使用MERGE 时是否有其他方法可以实现这一点。

【问题讨论】:

  • 我不明白。为什么不简单地使用标识列?这是解决此类问题的最佳方法。
  • @ZoharPeled 我不能使用身份,因为我需要单独跟踪这些插入的记录。

标签: sql-server sql-server-2008 sql-server-2012 unique-constraint sql-merge


【解决方案1】:

确实,NEXT VALUE FOR 的文档说:

限制和限制

NEXT VALUE FOR函数不能用在下面 情况:

MERGE 声明中。 (除非NEXT VALUE FOR 函数是 在目标表中的默认约束中使用,并且使用默认值 在MERGE 语句的CREATE 语句中。)

所以,如果您不想在目标表定义中使用NEXT VALUE FOR 作为默认约束或简单的IDENTITY,那么我能想到的唯一其他事情就是触发器。 INSTEAD OF INSERT 触发器。

【讨论】:

  • 看起来没有其他选择,最好单独更新和插入连接(至少我可以使用序列对象)而不是在这种情况下合并。
  • @RajeshBhat,是的,使用单独的 INSERTUPDATE 绝对是一种选择。
猜你喜欢
  • 2019-06-17
  • 2017-06-17
  • 2017-05-08
  • 2010-09-18
  • 2014-07-20
  • 1970-01-01
  • 2023-03-22
  • 2011-08-19
  • 2013-05-04
相关资源
最近更新 更多