gpt4 book ai didi

sql-server - 用 THROW 替换 RAISERROR

转载 作者:行者123 更新时间:2023-12-03 18:27:30 35 4
gpt4 key购买 nike

在我的历史过程中,我总是捕获异常,然后在 ROLLBACK 之后引发它。我在 MSDN 中看到推荐的方法(对于 SQL2012+)是 THROW

基于这个示例程序:

CREATE PROC my_procName

@id int

AS
BEGIN TRY
BEGIN TRAN

UPDATE [tbl_A] WHERE (ID=@id);
UPDATE [tbl_B] WHERE (fkID=@id);
UPDATE [tbl_C] WHERE (fkID=@id);

COMMIT TRAN
END TRY

BEGIN CATCH
ROLLBACK TRAN
DECLARE @ErrMsg nvarchar(4000)
DECLARE @ErrSeverity int
SET @ErrMsg = ERROR_MESSAGE()
SET @ErrSeverity = ERROR_SEVERITY()
RAISERROR(@ErrMsg, @ErrSeverity, 1)
END CATCH
GO

这是在保留 ROLLBACK 的同时抛出异常的正确方法吗?

CREATE PROC my_procName

@id int

AS
BEGIN TRY
BEGIN TRAN

UPDATE [tbl_A] WHERE (ID=@id);
UPDATE [tbl_B] WHERE (fkID=@id);
UPDATE [tbl_C] WHERE (fkID=@id);

COMMIT TRAN
END TRY

BEGIN CATCH
ROLLBACK TRAN
THROW
END CATCH
GO

我已经看过 MSDN、Google 和这个网站的例子,但没有一个包括 ROLLBACK,所以这只是一个快速的问题,以确保绝对确定。

最佳答案

只是为了在THROW 语句之前的record 语句应该以分号结束。但通常您的方法是正确的 - THROW 结束批处理,因此必须是您要在 catch block 中执行的最后一条语句。您可以选择将 THROW 与参数一起使用:抛出 [ { 错误编号 | @local_variable },
{ 留言 | @local_variable },
{ 状态 | @local_variable } ]
[ ; ]

关于sql-server - 用 THROW 替换 RAISERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20952017/

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