我正在尝试使一个长存储过程更易于管理,有一个存储过程调用其他存储过程是错误的例如我想有一个sproc将数据插入表中并根据类型插入其他信息进入该类型的表,如:
BEGIN TRANSACTION
INSERT INTO dbo.ITSUsage (
Customer_ID,
[Type],
Source
) VALUES (
@Customer_ID,
@Type,
@Source
)
SET @ID = SCOPE_IDENTITY()
IF @Type = 1
BEGIN
exec usp_Type1_INS @ID, @UsageInfo
END
IF @TYPE = 2
BEGIN
exec usp_Type2_INS @ID, @UsageInfo
END
IF (@@ERROR <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)
或者这是我应该在我的应用程序中处理的东西?
Joe*_*Joe 12
我们一直调用来自其他过程的过程.否则,很难/不可能分割数据库密集型(或仅限数据库)的应用程序.
从另一个程序内部调用过程是完全可以接受的.
但是,在依赖于@@ ERROR的Transact-SQL中容易出现故障.例如,您的代码.它将无法检测到插入失败,以及在被调用过程中产生的任何错误.这是因为@@ ERROR在每个语句执行时被重置,只保留最后一个语句的结果.我有一个博客条目,显示Transact-SQL和事务嵌套中的错误处理的正确模板.另外,Erland Sommarskog有一篇文章,很长一段时间以来,它都是关于Transact-SQL中错误处理的参考文献.
| 归档时间: |
|
| 查看次数: |
4903 次 |
| 最近记录: |