Добавить поток управления в SQL-сервер оператора Merge - PullRequest
0 голосов
/ 29 марта 2012

Я делаю оператор MERGE в SQL Server 2008 R2.Я хочу, чтобы внутри ветви 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 Ответ

2 голосов
/ 29 марта 2012

Ключевые слова INSERT, UPDATE и DELETE, являющиеся частью MERGE, могли заставить вас думать, что MERGE является своего рода составным утверждением.Но это всего лишь комплекс один.Вышеупомянутые ключевые слова вводят пункты из MERGE, а не отдельные соответствующие утверждения, сколь бы они не напоминали последние.

Так что да, если не как отдельная процедура, но по крайней мереснаружи MERGE - это то, как ваши дополнительные вставки должны быть реализованы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...