【问题标题】:how can I return row information on a failed insert/update in SQL Server?如何在 SQL Server 中返回有关插入/更新失败的行信息?
【发布时间】:2009-06-22 14:55:29
【问题描述】:

假设我正在对表进行插入或更新。因此,在 BEGIN CATCH/END CATCH 中,我可以为 ERROR_MESSAGE() 定义一个变量并取回我的错误消息:

无法将值 NULL 插入列 'columnname'、表 'Table';列不允许空值。插入失败。

有什么方法可以返回说有问题的记录的主键或任何东西来确定哪一行实际失败了?我在失败时回滚事务,所以我不能查看“最后一个”记录来查看下一个有问题的记录。

【问题讨论】:

    标签: tsql error-handling


    【解决方案1】:

    这是不可能的 AFAIK,因为您并没有真正地一次只处理一张唱片。

    当然,对于插入,还没有分配主键。如果您真的需要那种细粒度的细节,我可以提供的最佳建议是一次插入/更新一行,这样您就可以确定是哪一行引发了错误。

    【讨论】:

    • 不知何故我害怕这可能是没有其他原因的答案,我不想认为我已经做了很长时间而且从未遇到过它......
    【解决方案2】:

    就我个人而言,在尝试插入之前,我会检查我的数据是否有类似的东西。不要一次只工作一张唱片。而是编写一些内容来检查所需字段中不存在的数据。如果您在检查时将有关失败的信息放入表变量中,回滚后它仍然可用,然后您可以将其插入到永久错误表中以查看导致问题的记录。

    【讨论】:

    • 事实上张贴者在 T-SQL 中使用 TRY / CATCH 我假设数据已经全部是服务器端的,因此一次插入一行我认为不会更糟稍后回滚负载。
    • 其实是在计算数据,有些计算涉及到几个字段。当然,我可以轻松地包装所有内容,但我希望更多可以用作诊断的东西,因为这些字段永远不应该为 NULL,因此它有助于验证我的计算。
    • 使用 try catch 与处理一组行没有任何关系。这只是错误处理。
    猜你喜欢
    • 1970-01-01
    • 2018-09-03
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多