TSQL合并错误处理

TSQL合并错误处理,tsql,error-handling,merge,Tsql,Error Handling,Merge,运行合并语句时需要帮助处理错误。 如何使合并的行为看起来好像在处理的每一行周围都有一个try-catch块 (如果遇到错误,捕获该错误并记录它(或任何其他处理),然后继续处理下一行)? Merge语句的默认行为是什么?它是在发生错误时回滚整个事务,还是继续处理记录? output子句可以用来检查错误吗?与所有其他DML语句(INSERT、UPDATE、DELETE)一样,MERGE是一个要么全有要么全无的命题——要么全部成功,要么失败(如果打开了这样一个语句,它运行的隐式事务将回滚) 如果将出现

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

与所有其他DML语句(INSERT、UPDATE、DELETE)一样,MERGE是一个要么全有要么全无的命题——要么全部成功,要么失败(如果打开了这样一个语句,它运行的隐式事务将回滚)


如果将出现实际错误(例如,断开的外键约束、检查约束、截断),则需要事先处理这些错误,或更改合并以避免出现错误(例如,显式截断过长的数据)。如果MERGE语句的源是一个复杂的查询,并且数据清理可能很复杂,那么您可能希望将结果分阶段放到一个临时表中以执行此类清理。

与所有其他DML语句(INSERT、UPDATE、DELETE)一样,MERGE是一个全有或全无的命题-要么全部成功,要么失败(如果已经打开了隐式事务,那么它在其中运行的隐式事务将回滚)


如果将出现实际错误(例如,断开的外键约束、检查约束、截断),则需要事先处理这些错误,或更改合并以避免出现错误(例如,显式截断过长的数据)。如果MERGE语句的源是一个复杂的查询,并且数据清理可能很复杂,则可能需要将结果暂存到一个临时表中以执行此类清理。

由于我的数据位于暂存表中,因此在运行合并之前,我将尝试处理这些问题。在任何地方,我都可以找到这些类型错误的列表,以便可以预检查吗?@Debra-您将遇到的常见错误类型将特定于您所针对的表-正如我所说的,这将是表上的约束问题(PK、FK、check、Unique)或数据类型问题(尝试将字母字符放入数字列,或超出列允许长度的文本)。除了@Damien_的不信教者所说的清单之外,检查表触发器以查看触发器中是否有一些需要检查的约束。哦,是的,我忘记了你应该检查所需的值,如果字段不允许空值,那么你需要检查数据以确保该字段没有空值。因为我的数据在暂存表中。在运行合并之前,我将尝试处理这些问题。在任何地方我都可以找到这些类型错误的列表,以便我可以对其进行预检查?@Debra-您将遇到的常见类型的错误将特定于您目标的表-正如我所说,这将是表上的约束问题(PK、FK、check、Unique),或数据类型问题(尝试将字母字符放入数字列,或超出列允许长度的文本)。除了@Damien_的不信教者所说的清单之外,检查表触发器以查看触发器中是否有需要检查的约束。哦,是的,我忘了你应该检查所需的值,如果字段不允许空值,那么你需要检查数据以确保该字段没有空值。