2012-03-29 37 views
0

我在SQL Server 2008 R2中執行MERGE語句。我想要做的是有一個NOT MATCHED分支內的多個邏輯:在SQL Server合併語句中添加控制流程

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來包裝這段代碼。任何建議來克服這個限制?

+0

我不相信你可以:這就是語法的定義方式。 – 2012-03-29 00:18:32

+0

所以我想我必須將程序分解爲兩個,一個用於更新,另一個用於插入... – Icerman 2012-03-29 00:31:54

回答

2

INSERTUPDATEDELETE關鍵字進行的MERGE部分可能導致你以爲MERGE是一種複合語句。但它只是一個複雜的之一。上面提到的關鍵詞引入條款MERGE,不區分相應的語句,但它們可能與後者很相似。

所以是的,如果不是作爲一個單獨的程序,但至少在MERGE之外是你的額外插入必須如何實現。