Tsql 如何返回SQL Server中插入/更新失败的行信息?

Tsql 如何返回SQL Server中插入/更新失败的行信息?,tsql,error-handling,Tsql,Error Handling,假设我正在对一个表进行插入或更新。因此,在BEGIN CATCH/END CATCH中,我可以定义一个ERROR_MESSAGE()变量并返回我的错误消息: 无法将值NULL插入到“columnname”列、表“table”中;列不允许空值。插入失败 是否有任何方法可以返回(例如,有问题记录的主键)或任何东西来标识哪一行实际失败?我会在事务失败时回滚事务,这样我就不会查看“最后一条”记录来查看下一条有问题的记录。这在当时是不可能的,因为您一次并没有真正处理一条记录 当然,对于插入,还没有指定主键

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

无法将值NULL插入到“columnname”列、表“table”中;列不允许空值。插入失败


是否有任何方法可以返回(例如,有问题记录的主键)或任何东西来标识哪一行实际失败?我会在事务失败时回滚事务,这样我就不会查看“最后一条”记录来查看下一条有问题的记录。

这在当时是不可能的,因为您一次并没有真正处理一条记录


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

就我个人而言,在尝试插入之前,我会检查我的数据。不要一次只做一张唱片。相反,写一些东西,将chcek用于必填字段中不存在的数据。如果在检查时将失败内容的信息放入表变量中,则回滚后该信息仍然可用,然后可以将其插入永久性错误表中,以查看导致问题的记录

不知何故,我担心这可能是答案,因为没有其他原因,我不愿意认为我已经做了很长一段时间了,从来没有遇到过它…事实上,海报在T-SQL中使用了TRY/CATCH,我假设数据已经全部是服务器端的,因此,一次插入一行并不比稍后回滚加载更糟糕。实际上,数据正在计算中,一些计算涉及多个字段。当然,我可以轻松地包装所有内容,但我希望有更多的东西可以用作诊断,因为字段永远不应该为空,因此这将有助于验证我的计算。使用try-catch与处理一行中的一行无关。这只是错误处理。