【发布时间】:2010-11-01 08:20:54
【问题描述】:
在运行合并语句时需要帮助处理错误。 如何使合并表现得好像它在处理的每一行周围都有一个 try-catch 块 (如果遇到错误,捕获该错误并记录它(或任何其他处理)然后继续处理下一行)? Merge 语句的默认行为是什么,它是在发生错误时回滚整个事务还是继续处理记录? 输出子句可以用来检查错误吗?
【问题讨论】:
标签: tsql error-handling merge
在运行合并语句时需要帮助处理错误。 如何使合并表现得好像它在处理的每一行周围都有一个 try-catch 块 (如果遇到错误,捕获该错误并记录它(或任何其他处理)然后继续处理下一行)? Merge 语句的默认行为是什么,它是在发生错误时回滚整个事务还是继续处理记录? 输出子句可以用来检查错误吗?
【问题讨论】:
标签: tsql error-handling merge
与所有其他 DML 语句(INSERT、UPDATE、DELETE)一样,MERGE 是一个全有或全无的命题 - 要么全部成功,要么失败(以及它运行的隐式事务,如果这样的话打开,回滚)。
如果会出现实际错误(例如,损坏的外键约束、检查约束、截断),您需要事先处理这些错误,或者更改您的 MERGE 以使错误不会发生(例如,显式截断过长的数据) .如果您的 MERGE 语句的来源是一个复杂的查询,并且数据清理可能很复杂,您可能希望将结果暂存到一个临时表中以执行此类清理。
【讨论】: