如安在存储进程中获取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()只会捕捉最后一个错误动静,这凡是会说“实行建设工具失败”,并带有真正的错误在第一条错误动静中给出.这是构建您本身的错误动静的处所. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |