2012-03-29 29 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之外是你的额外插入必须如何实现。