2

ターゲット表には、ソース表に存在しないPK列usr_cdがあります。したがって、ソースからターゲットに挿入する際に、固有のコードを生成する必要があります。 MERGEステートメントを使用しているときに、これをどのように達成できますか?MERGE内のINSERTで一意のコードを生成する方法は?

以下のオプションは運なしで試されています。

  1. Sequenceオブジェクト:MERGE内部で使用することはできません。
  2. SPコール:INSERTMERGEの内部でSPを実行できません。
  3. 関数呼び出し:UDF内でシーケンスオブジェクトを使用できないため、役立たないでしょう。また、テーブルに一意の値を格納しても、UDF内で更新することはできません。
  4. ソーステーブルにコードを追加する:一部のレコードが更新され、一部が挿入されるため、シーケンスを壊すため、使用できません。

ターゲットテーブルにデフォルトを追加することも1つの選択肢ですが、避けたいのですが。

MERGEを使用している間にこれを達成する他の方法があるかどうかを教えてください。

+1

私はそれを取得しません。単純にID列を使用しないのはなぜですか?それはこの種の問題に対する最良の解決策です。 –

+0

@ZoharPeledこれらの挿入されたレコードを個別に追跡する必要があるため、IDを使用することはできません。 –

答えて

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'を使うことは間違いなくオプションです。 –

関連する問題