gpt4 book ai didi

sql - 如何在存储过程中获取sql错误

转载 作者:行者123 更新时间:2023-12-02 08:55:07 31 4
gpt4 key购买 nike

我正在使用 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上找到了这篇文章 http://msdn.microsoft.com/en-us/library/ms178592(v=sql.90).aspx

但它只是用 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 block 可能很棘手,但比 @@error 彻底得多。更重要的是,您可以在其中使用各种 error_xxx() 函数。在这里,我将正确的错误消息以及足够的其他数据存储在变量 @ErrorMessage 中以重新引发错误。从这里,可以使用任意数量的选项;您可以将 @ErrorMessage 设置为输出变量,测试并处理特定错误,或者构建您自己的错误消息(或调整现有的错误消息以使其更清晰 - 您可能会因为发现自己想要这样做的频率而感到恼火)。其他选项将自行呈现。

需要注意的事情:在某些情况下,SQL 会连续抛出两条错误消息...而 error_message() 只会捕获最后一条,通常会显示“尝试”之类的内容创建对象失败”,第一条错误消息中给出了真正的错误。这就是构建您自己的错误消息的用武之地。

关于sql - 如何在存储过程中获取sql错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13647437/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com