2012-03-29 2 views
0

SQL Server 2008 R2でMERGEステートメントを実行しています。私は何をしたい、NOT MATCHEDブランチ内でより多くのロジックを持つことです。SQLサーバーのマージステートメントで制御フローを追加します

WHEN NOT MATCHED THEN 
    INSERT (col1, col2, col3) 
    VALUES (SOURCE.col1, SOURCE.col2, SOURCE.col3) 
     OUTPUT INSERTED.col1, SOURCE.col4 
    INTO @Mapping 

    INSERT INTO @newChildren 
    ( col1, 
    other columns,) 
    SELECT 
    ( TARGET.col1, 
    other columns) 
     FROM @input 
     INNER JOIN @Mapping 
     ON @input.col1 = @Mapping.col2 

    EXECUTE Children_Create @newChildren; 

アイデアが別のストアド・プロシージャに別の入力を形成するために使用するINSERT結果を行うことです。しかし、コントロールフローはSQL Server 2008 MERGEではサポートされていないようです。このコードをBEGIN/ENDにラップすることはできません。この限界を克服するための提案はありますか? MERGEの一部であること

+0

私はあなたができると信じていません。構文が定義されている方法です。 –

+0

私は、手順を2つに分割しなければならないと思います.1つは更新用、もう1つは挿入用です... – Icerman

答えて

2

INSERTUPDATEDELETEキーワードはMERGEは、複合文の一種であることを考えることにあなたを導いている場合があります。しかし、それは複合体です。上記キーワードは、MERGEであることを示していますが、多くの場合、後者に似ている可能性があります。

したがって、個別の手順ではない場合でも、最低でもMERGE以外は、追加の挿入を実装する必要があります。