在SQL Server Merge语句中添加控制流

时间:2012-03-29 00:15:57

标签: sql-server-2008 stored-procedures merge

我正在SQL Server 2008 R2中执行MERGE语句。我想要做的是在NOT MATCHED分支中有一个更多的逻辑:

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包装成这个代码。有任何建议可以克服这个限制吗?

1 个答案:

答案 0 :(得分:2)

INSERTUPDATEDELETE关键字是MERGE的一部分,可能会让您认为MERGE是一种复合语句。但它只是一个复杂的。上述关键字引入了MERGE子句,而不是单独的相应陈述,但它们可能与后者类似。

所以是的,如果不是作为一个单独的程序,但至少在MERGE之外是必须如何实现你的额外插入。