【问题标题】:TSQL Merge error handlingTSQL 合并错误处理
【发布时间】:2010-11-01 08:20:54
【问题描述】:

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

【问题讨论】:

    标签: tsql error-handling merge


    【解决方案1】:

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

    如果会出现实际错误(例如,损坏的外键约束、检查约束、截断),您需要事先处理这些错误,或者更改您的 MERGE 以使错误不会发生(例如,显式截断过长的数据) .如果您的 MERGE 语句的来源是一个复杂的查询,并且数据清理可能很复杂,您可能希望将结果暂存到一个临时表中以执行此类清理。

    【讨论】:

    • 由于我的数据在临时表中,我将在运行合并之前尝试处理这些问题。在哪里可以找到这些类型的错误列表以便我预先检查?
    • @Debra - 您将遇到的常见错误类型将特定于您所针对的表 - 正如我所说,这将是表上的约束问题(PK、FK、检查、唯一)或数据类型问题(试图将字母字符放入数字列,或长度超过列允许的文本)。
    • 除了@Damien_The_Unbeliever 所说的检查表触发器的列表之外,还可以查看触发器中是否存在一些需要检查的约束。
    • 哦对了,我忘了你应该检查必填值,如果一个字段不允许空值,那么你需要检查数据以确保它不会有该字段的空值。
    猜你喜欢
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    相关资源
    最近更新 更多