TSQL合并错误处理

时间:2010-11-01 08:20:54

标签: tsql error-handling merge

运行合并语句时需要帮助处理错误。 如何使合并的行为就像它有一个围绕每个处理行的try-catch块一样 (如果遇到错误,捕获该错误并记录它(或任何其他处理)然后继续处理下一行)? Merge语句的默认行为是什么,它是在发生错误时回滚整个事务还是继续处理记录? 输出子句可以用来检查错误吗?

1 个答案:

答案 0 :(得分:3)

MERGE,与所有其他DML语句(INSERT,UPDATE,DELETE)一样,是一个全有或全无的命题 - 要么完全成功,要么失败(以及它在其中运行的隐式事务,如果有这样的话打开,回滚)。

如果存在实际错误(例如,破坏外键约束,检查约束,截断),则需要事先处理这些错误,或者更改MERGE以便不会发生错误(例如,明确截断过长的数据) 。如果MERGE语句的来源是复杂查询,并且数据清理可能很复杂,您可能希望将结果转换为临时表以执行此类清理。