2017-11-09 8 views
0

私は3つのテーブルを持っている:SQLマージOUTPUT句のエラー

  1. ソーステーブル
  2. ODSテーブル
  3. ステージングテーブル

私のMERGE文は、ODSにデータを挿入するために、ソーステーブルを使用し、ステージングテーブルに出力します。挿入後、ソーステーブルとODSのカウントが同じである、しかし、カウントをステージングすると、両方よりも小さいです。出力句は、ステージングにODSに挿入されているもののコピーを挿入することになったが、それはケースではありませんされています。誰がなぜそれが事実であるか知っていますか?私のマージステートメントは次のとおりです: -

ありがとう!

答えて

0

列リストを定義するSQLマージOUTPUT句のエラー

、巨大なアンチパターンであります私はそれが前のLOBデータのステージング表を切り捨てたLOBでストアドプロシージャを実行するたびに、変数はそうしたがって、ステージング表は、以下のデータを持っていた理由ソーステーブルとターゲットテーブルの両方よりも優れています。これで解決しました。

0

おそらく;必要があります:Merge docから

BEGIN TRANSACTION 

BEGIN TRY 
/* truncate staging table */ 
TRUNCATE TABLE stage table ; 

/* merge into ODS based on NK */ 
MERGE INTO ODS table as TRG 
USING source table as SRC 
/* ON Natural Key for that table/data type */ 
    ON TRG.column = SRC.column 

/* insert new records into ODS */ 
WHEN NOT MATCHED AND SRC.column = @LOB THEN 
    INSERT (columns) 
    VALUES (columns) 

OUTPUT INSERTED.* INTO STG.table; 

COMMIT TRANSACTION; 

を:

MERGE文はセミコロンが必要です(;)文の終了として。


またOUTPUT INSERTED.* INTO STG.table;問題は、変数@LOBストアドプロシージャということだった*なく

output inserted.col1, inserted.col2 INTO stg.table(col1_name, col2_name) 
+0

あなたの応答をlad2025 @ありがとうございますが、私はLOBよるSpを実行するたびに、ステージング表は以下のデータを持っていた理由の問題は、変数LOBストアのproc変数だったようにそれが故に、以前のLOBデータのステージング表を切り捨てしましたソーステーブルとターゲットテーブルの両方よりも優れています。これで解決しました。セミコロンと 'OUTPUT INSERTEDについて – Hmen

+0

@Hmen注意事項* STG.table INTO;'まだ有効である:) – lad2025