gpt4 book ai didi

sql - 事务内插入失败,但 sql server 返回 1 行受影响?

转载 作者:行者123 更新时间:2023-12-02 16:53:22 25 4
gpt4 key购买 nike

这是我的存储过程的执行流程:

ALTER procedure dbo.usp_DoSomething

as

declare @Var1 int
declare @Var2 int
declare @Var3 int

select
@Var1 = Var1,
@Var2 = Var2,
@Var3 = Var3
from Table
where
...

BEGIN TRY
BEGIN TRANSACTION
/* UPDATE Table. This executes successfully */

/* INSERT Table. This fails due to PK violation */

COMMIT TRAN /* This does not happen */
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRAN /* This occurs because TRANS failed */
END CATCH

UPDATE 成功运行。 INSERT 失败,因此事务 被回滚。

执行后,表格看起来正确,没有任何变化。但是当我运行 SP 时,我收到以下消息:

(1 row(s) affected)

(0 row(s) affected)

所以我问自己,受影响的前 1 行 来自哪里?

然后我就想是这个原因,但是想确认一下:OUTPUT Clause (Transact-SQL)

An UPDATE, INSERT, or DELETE statement that has an OUTPUT clause will return
rows to the client even if the statement encounters errors and is rolled back.
The result should not be used if any error occurs when you run the statement.

最佳答案

默认情况下,将为每个 DML 语句返回行计数,除非启用了 SET NOCOUNT ON。无论事务是否成功、回滚或提交,您的 UPDATE 语句都会成功,因此会收到通知(1 行受影响)

您提到的 OUTPUT 子句与此无关,因为您没有指定它。

关于sql - 事务内插入失败,但 sql server 返回 1 行受影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36698868/

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