2

在目標表中有一個PK列usr_cd,它不存在於源表中。因此,從源插入目標時,我想生成一個唯一的代碼。當我使用MERGE聲明時,如何實現此目的?如何在MERGE內的INSERT中生成唯一代碼?

以下選項都試過了沒有運氣:

  1. Sequence對象:內MERGE不能使用。
  2. SP調用:無法在INSERTMERGE內執行SP。
  3. 函數調用:沒有幫助,因爲我不能在UDF中使用序列對象。另外如果我在表中存儲一個唯一的值,我將無法在UDF內更新。
  4. 在源表中添加代碼:不能使用,因爲有些記錄會被更新,有些會被插入,因此會破壞序列。

將默認添加到目標表是一種選擇,但我想避免這種情況。

讓我知道在使用MERGE時是否有其他方法來實現此目的。

+1

我不明白。爲什麼不簡單使用標識列?這是解決這類問題的最佳解決方案。 –

+0

@ZoharPeled我不能使用身份,因爲我需要分別跟蹤這些插入的記錄。 –

回答

3

事實上,NEXT VALUE FOR文檔說:

限制和約束

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

MERGE聲明。 (除了當NEXT VALUE FOR功能目標表的默認約束使用 默認值是在MERGE聲明CREATE語句中使用 。)

所以,如果你不想使用NEXT VALUE FOR作爲目標表定義中的默認約束或簡單的IDENTITY,我能想到的唯一的其他事情就是觸發器。一個INSTEAD OF INSERT觸發器。

+0

看起來沒有其他選擇,它更適合單獨更新和插入連接(至少我可以使用序列對象),而不是在這種情況下合併。 –

+0

@RajeshBhat,是的,使用單獨的'INSERT'和'UPDATE'絕對是一種選擇。 –