0

次の方法で2つのテーブルをマージする必要があります。

  • ターゲットには1つの追加の列IDがあります。このIDは、別の単一列マスターテーブルから取得されます。
  • マージステートメントにレコードを挿入するときに、新しい行をマテリアルテーブルに挿入し、それを使用しidてTARGETテーブルに挿入する必要があります。

新しく挿入されたIDを挿入して返すストアドプロシージャを作成しました。現在、問題はSQLマージ内にあり、ストアドプロシージャを呼び出すことはできません。

この問題の解決策は何でしょうか?関数ではINSERTを実行できないため、スカラー関数を使用できません。

DECLARE @temp INT
MERGE dbo.mytabletarget T
USING dbo.mytableSource S
ON T.refId=S.RefId
WHEN MATCHED  THEN
UPDATE 
SET T.col1=S.col1,
    T.Col2=S.Col2
WHEN NOT MATCHED BY TARGET THEN
INSERT (Id,col1,col2)
VALUES({Here i need value from SP. SP simply Inserts a new Id into master table and Returns it},S.col1,S.col2);
GO
4

1 に答える 1

0

この問題の解決策は何でしょうか?

ストアドプロシージャは使用しないでください。明らかですね。

マージステートメントの場合、ステートメント内でコマンドを実行することにほとんど行き詰まります。MergeはETLロードに焦点を合わせており、利点と制限があります。

基本的に、ロジックをマージステートメントに入れます。

マージステートメントにレコードを挿入するときに、新しい行をマテリアルテーブルに挿入し、そのIDを使用してTARGETテーブルに挿入する必要があります。

うーん、ルックアップテーブルのメンテナンス?

そのための通常のアプローチは、ルックアップテーブルが最初に(別のステートメントで)入力されていることを確認することです。ETL(およびマージの元になる場所)は、その特定の理由でステージに沿って機能することがよくあります。

申し訳ありませんが、私にもこれ以上の解決策はありません;(

于 2013-01-15T12:47:42.500 に答える