如何在MERGE内的INSERT中生成唯一代码?

时间:2017-02-10 05:32:36

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

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

尝试以下选项没有运气:

  1. 序列对象:不能在MERGE内使用。
  2. SP电话:无法在MERGE中的INSERT内执行SP。
  3. 函数调用:无法帮助,因为我无法在UDF中使用序列对象。此外,如果我在表中存储唯一值,我将无法在UDF内更新。
  4. 在源表中添加代码:不能使用,因为某些记录会被更新,有些会被插入,因此会破坏序列。
  5. 向Target表添加默认值是一个选项,但我想避免这种情况。

    如果在使用MERGE时有任何其他方法可以让我知道。

1 个答案:

答案 0 :(得分:3)

确实,NEXT VALUE FOR的文档说:

  

限制和限制

     

以下不能使用NEXT VALUE FOR功能   情况:

     

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

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