如何在存储过程中获取sql错误
我正在使用SQL Server 2005.我创建了一个大部分时间都可以工作的存储过程,但是我发现了一个不能满足我想要的实例. 目前,代码执行类似的操作 if @@error <> 0 begin select @message_error = "There was a database error adding product "+ @product + " to product line end 其中@message_error是输出变量. 所以,我可以选择@@ error并得到一个数字,但我真正想要的只是SQL错误. 像嘿这样的东西,我无法做到这一点,因为这个列上有一个fk约束或者其他什么.我在msdn上发现了这篇文章 但它只用RAISERROR抛出自定义异常,我不想创建自己的错误消息或异常,我只是想知道为什么东西不起作用.我可以通过Management Studio执行存储过程并查看确切的SQL错误,但尝试匹配来自站点的数据并手动插入它是很乏味的. 如何将SQL错误文本转换为输出变量? 解决方法这是我使用的存储过程模板的一部分:/* CREATE PROCEDURE... */ DECLARE @ErrorMessage varchar(2000),@ErrorSeverity tinyint,@ErrorState tinyint /* Additional code */ BEGIN TRY /* Your code here */ END TRY BEGIN CATCH SET @ErrorMessage = ERROR_MESSAGE() SET @ErrorSeverity = ERROR_SEVERITY() SET @ErrorState = ERROR_STATE() RAISERROR(@ErrorMessage,@ErrorSeverity,@ErrorState) BREAK END CATCH /* Further cleanup code */ Try / Catch块可能很棘手但比@@ error更彻底.更重要的是,您可以使用其中的各种error_xxx()函数.在这里,我将正确的错误消息存储在变量@ErrorMessage中,以及足够的其他数据来重新引发错误.从这里可以获得任意数量的选项;你可以让@ErrorMessage成为一个输出变量,测试和处理特定的错误,或者构建你自己的错误信息(或者调整现有的错误信息 – 你可能会发现你想要这样做的频率很烦恼).其他选项将提出这些问题. 需要注意的事项:在某些情况下,SQL会抛出两个错误消息…而error_message()只会捕获最后一个错误消息,这通常会说“尝试创建对象失败”,并带有真正的错误在第一条错误消息中给出.这是构建您自己的错误消息的地方. (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |