TSQL Обработка ошибок слияния - PullRequest
0 голосов
/ 01 ноября 2010

Нужна помощь в обработке ошибок при выполнении оператора слияния. Как заставить слияние вести себя так, как будто оно имеет блок try-catch, окружающий каждую обрабатываемую строку (Если обнаружена ошибка, перехватите эту ошибку и зарегистрируйте ее (или любую другую обработку), затем продолжите обработку следующих строк)? Каково поведение по умолчанию оператора Merge, выполняет ли откат всей транзакции при возникновении ошибки или продолжает обрабатывать записи? Может ли предложение вывода использоваться для проверки ошибок?

1 Ответ

3 голосов
/ 01 ноября 2010

MERGE, как и все другие операторы DML (INSERT, UPDATE, DELETE), является предложением «все или ничего» - либо оно полностью выполнено, либо не выполнено (и неявная транзакция, в которой выполняется, если такая былаоткрыт, откат).

Если будут реальные ошибки (например, нарушенные ограничения внешнего ключа, проверочные ограничения, усечение), вам нужно заранее разобраться с ними или изменить MERGE так, чтобы ошибкане будет происходить (например, явно обрезать слишком длинные данные).Если источником вашего оператора MERGE является сложный запрос и очистка данных, вероятно, будет сложной, вам может потребоваться поместить результаты во временную таблицу для выполнения такой очистки.

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