Sql server 确定我们自己的存储过程是否已成功执行的最佳方法是什么

Sql server 确定我们自己的存储过程是否已成功执行的最佳方法是什么,sql-server,stored-procedures,Sql Server,Stored Procedures,我知道一些可以用来确定我们自己的存储过程是否已成功执行的方法。(使用输出参数,如果存储过程在没有任何错误的情况下执行,则将select(如select 1)放在存储过程的末尾,…) 那么,哪一个更好?为什么?有一个打印语句,清楚地说明SP是否已创建,这样可读性会更好 e、 g 创建过程customordersdetail@OrderID int 作为 ... ... ... 去 如果对象ID('dbo.customordersdetail')不为空 打印'>' 其他的 打印'>' 去 如果有一条

我知道一些可以用来确定我们自己的存储过程是否已成功执行的方法。(使用输出参数,如果存储过程在没有任何错误的情况下执行,则将select(如select 1)放在存储过程的末尾,…)


那么,哪一个更好?为什么?

有一个打印语句,清楚地说明SP是否已创建,这样可读性会更好

e、 g

创建过程customordersdetail@OrderID int
作为
...
...
...
去
如果对象ID('dbo.customordersdetail')不为空
打印'>'
其他的
打印'>'
去

如果有一条打印语句,清楚地说明SP是否已创建,则可读性会更好

e、 g

创建过程customordersdetail@OrderID int
作为
...
...
...
去
如果对象ID('dbo.customordersdetail')不为空
打印'>'
其他的
打印'>'
去

在过程中出现错误时使用比使用假参数更好地与大多数客户端集成。它们只需调用过程,RAISERROR就会在客户端应用程序中转换为异常,应用程序代码很难避免异常,必须捕获并处理异常。

在过程中出错时使用比使用假参数更好地与大多数客户端集成。它们只需调用过程,RAISERROR就会在客户端应用程序中转换为异常,应用程序代码很难避免异常,必须捕获并处理异常。

SP非常像一个方法/子例程/过程&它们都有一个任务要完成。任务可以像计算一样简单&返回结果,也可以只是对表中的记录进行简单的操作。根据任务的不同,您可以返回一个out值,指示任务的结果是成功、失败还是实际结果。

SP非常像一个方法/子例程/过程&它们都有一个任务要完成。任务可以像计算一样简单&返回结果,也可以只是对表中的记录进行简单的操作。根据任务的不同,您可以返回一个out值,指示任务的结果是成功、失败还是实际结果。

如果您需要整个项目/数据库的通用T-SQL解决方案,您可以对所有过程使用输出参数。但是RAISEERROR是处理客户机代码错误的方法,而不是T-SQL。

如果您需要针对整个项目/数据库的通用T-SQL解决方案,则可以对所有过程使用输出参数。但是RAISEERROR是处理客户端代码中错误的方法,而不是T-SQL。

为什么不使用不同的返回值,这些返回值可以在代码中处理?

为什么不使用不同的返回值,这些返回值可以在代码中处理?

引入额外的输出参数或额外的选择是不必要的

如果你只需要知道是否有问题,那么成功的执行就足够了。看一看关于XACT_ABORT的讨论,然后尝试…捕获和捕获


如果您想知道具体的错误,将此信息传递给调用者的正确方法是什么。

不需要引入额外的输出参数或额外的选择

如果你只需要知道是否有问题,那么成功的执行就足够了。看一看关于XACT_ABORT的讨论,然后尝试…捕获和捕获


如果您想知道具体的错误,将此信息传递给调用者的正确方法是什么。

在大多数生产场景中,我倾向于在数据库层中部署自定义错误报告组件,作为解决方案的一部分。没什么特别的,只有几个日志表和几个管理错误日志过程的存储过程

然后,使用SQL server 2005及更高版本中提供的TRY-CATCH-BLOCK功能封装在生产服务器上执行的所有存储过程代码

这意味着,在给定存储过程不太可能失败的情况下,发生的错误的详细信息以及生成该错误的存储过程将记录到日志表中。在CATCH块中进行一个简单的存储过程调用,以记录相关的详细信息

这一实现的基础实际上在在线书籍中进行了解释

如果您愿意,您可以轻松地进一步扩展此实现,例如,通过将电子邮件通知合并到DBA,甚至可以根据错误的严重程度发送SMS警报

这种实现可以确保,如果存储过程没有报告失败,那么它当然是成功的

一旦您有了一个简单而健壮的框架,就可以直接复制您的基本实现并将其部署到其他生产服务器/应用程序平台

这里没有什么特别的,只是简单的错误记录和报告

另一方面,如果您还需要记录存储过程的成功执行情况,则可以设计一个类似的解决方案,其中包含日志表


我想这个问题需要一篇博文……。

在大多数生产场景中,我倾向于在数据库层中部署一个自定义错误报告组件,作为解决方案的一部分。没什么特别的,只有几个日志表和几个管理错误日志过程的存储过程

然后,使用SQL server 2005及更高版本中提供的TRY-CATCH-BLOCK功能封装在生产服务器上执行的所有存储过程代码

这意味着,在给定存储过程不太可能失败的情况下,发生的错误的详细信息以及生成该错误的存储过程将记录到日志表中。一个简单的s
CREATE PROCEDURE CustOrdersDetail @OrderID int
AS
...
...
...
GO
IF OBJECT_ID('dbo.CustOrdersDetail') IS NOT NULL
    PRINT '<<< CREATED PROCEDURE dbo.CustOrdersDetail >>>'
ELSE
    PRINT '<<< FAILED CREATING PROCEDURE dbo.CustOrdersDetail >>>'
GO