SQL错误--EXECUTE表示BEGIN和COMMIT语句的数量不匹配
这是我的存储过程,我认为每件事都是正确的SQL错误--EXECUTE表示BEGIN和COMMIT语句的数量不匹配,sql,sql-server-2008,Sql,Sql Server 2008,这是我的存储过程,我认为每件事都是正确的 ALTER PROC USP_D_Delete ( @ID INT=NULL, @RETURN INT OUTPUT ) AS BEGIN SET NOCOUNT ON; BEGIN TRY BEGIN TRAN BEGIN DELETE FROM PE WHERE ID =@ID END COMMIT SET @RETU
ALTER PROC USP_D_Delete
(
@ID INT=NULL,
@RETURN INT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRAN
BEGIN
DELETE FROM PE WHERE ID =@ID
END
COMMIT
SET @RETURN = 1
RETURN @RETURN
END TRY
BEGIN CATCH
ROLLBACK
SET @RETURN = 0
RETURN @RETURN
END CATCH
END
当我试图从UI执行此操作时,我得到的错误如下
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements.Previous count = 0, current count = 1
请提供任何帮助,我无法找到解决方案,因为我认为此语法正确,尝试在回滚后提交,也没有用。可能您必须在
提交和回滚后添加一个单词TRAN
,如下所示:
ALTER PROC USP_D_Delete
(
@ID INT=NULL,
@RETURN INT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRAN
BEGIN
DELETE FROM PE WHERE ID =@ID
END
COMMIT TRAN
SET @RETURN = 1
RETURN @RETURN
END TRY
BEGIN CATCH
ROLLBACK TRAN
SET @RETURN = 0
RETURN @RETURN
END CATCH
END
可能您必须在commit
和rollback
之后添加一个单词TRAN
,如下所示:
ALTER PROC USP_D_Delete
(
@ID INT=NULL,
@RETURN INT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRAN
BEGIN
DELETE FROM PE WHERE ID =@ID
END
COMMIT TRAN
SET @RETURN = 1
RETURN @RETURN
END TRY
BEGIN CATCH
ROLLBACK TRAN
SET @RETURN = 0
RETURN @RETURN
END CATCH
END
也许我遗漏了一些东西,但我认为您的SP代码没有意义:
DELETE
语句是原子的,不需要显式事务
您的SP将始终返回1,因为如果您向DELETE
提供一个不存在的id,它将静默执行,并且不会删除任何内容。唯一可能出错并导致异常的是缺少PE
表。但在这种情况下,你没有任何东西可以回滚
也就是说,整个SP可以归结为唯一的DELETE
语句也许我遗漏了一些东西,但我认为您的SP代码没有意义:
DELETE
语句是原子的,不需要显式事务
您的SP将始终返回1,因为如果您向DELETE
提供一个不存在的id,它将静默执行,并且不会删除任何内容。唯一可能出错并导致异常的是缺少PE
表。但在这种情况下,你没有任何东西可以回滚
也就是说,整个SP可以归结为唯一的DELETE
statement请回答一个问题好吗?它做什么,你想让它做什么?也许如果你给交易起个名字BEGIN TRAN t1
,COMMIT TRAN t1
,ROLLBACK TRAN t1
@您想为该事务命名并重试吗?请参见下面的答案,代码看起来不错。我这里没有SQL Server,无法尝试;)拜托,你能用短语问个问题吗?它做什么,你想让它做什么?也许如果你给交易起个名字BEGIN TRAN t1
,COMMIT TRAN t1
,ROLLBACK TRAN t1
@您想为该事务命名并重试吗?请参见下面的答案,代码看起来不错。我这里没有SQL Server,无法尝试;)