Sql server rchar(1000),错误行() 插入@ErrorTable(公司ID、ID对象、登录名、模块代码、过程名、时间戳、业务模块、异常类别、异常级别、异常描述) 值(@companyID,NULL,@CREATE_LOGIN_NAME,@CREATED_IN_MODULE,@ProcName,@Current_Timestamp,NULL,'Error','High',@ErrorMessage) 如果@TRANCOUNT>0 回滚事务 端接 ErrorTable的EXEC update_db_log 结束

Sql server rchar(1000),错误行() 插入@ErrorTable(公司ID、ID对象、登录名、模块代码、过程名、时间戳、业务模块、异常类别、异常级别、异常描述) 值(@companyID,NULL,@CREATE_LOGIN_NAME,@CREATED_IN_MODULE,@ProcName,@Current_Timestamp,NULL,'Error','High',@ErrorMessage) 如果@TRANCOUNT>0 回滚事务 端接 ErrorTable的EXEC update_db_log 结束,sql-server,transactions,commit,rollback,Sql Server,Transactions,Commit,Rollback,我不知道你为什么会遇到这个问题。但当我完全按照您的代码进行操作时,我得到了相同的事务计数。这是我的密码: 创建表格 CREATE TABLE [dbo].[Test]( [Id] [int] IDENTITY(1,1) NOT NULL, [Name] [varchar](50) NULL, [IsActive] [bit] NULL CONSTRAINT [DF_Emails_IsActive] DEFAULT ((1)) ) SQL BEGIN TRY B

我不知道你为什么会遇到这个问题。但当我完全按照您的代码进行操作时,我得到了相同的
事务计数。这是我的密码:

创建表格

CREATE TABLE [dbo].[Test](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Name] [varchar](50) NULL,
    [IsActive] [bit] NULL CONSTRAINT [DF_Emails_IsActive]  DEFAULT ((1))
)
SQL

BEGIN TRY
    BEGIN TRANSACTION
        Print(@@TRANCOUNT)
        Print('start')
        Print(@@TRANCOUNT)
        INSERT INTO Test VALUES ('First')
        select 1/0
        Print(@@TRANCOUNT)
        Print('never reach')
        INSERT INTO Test VALUES ('Second')
        Print(@@TRANCOUNT)
    COMMIT TRANSACTION
END TRY
BEGIN CATCH
    Print(@@TRANCOUNT)
    Print('catch called')
    INSERT INTO Test VALUES ('Third')
    Print(@@TRANCOUNT)
    Print('inserted')

    IF @@TRANCOUNT > 0
    ROLLBACK TRANSACTION
END CATCH
SELECT * FROM Test 
回滚之前的语句也被回滚。(在您的情况下,
根据我的评论插入@ErrorTable…

以下是输出:

1
start
1

(1 row(s) affected)

(0 row(s) affected)
1
catch called

(1 row(s) affected)
1
inserted

(0 row(s) affected)

您的
RPM\u PROC\u INSERT\u AUDIT
回滚事务吗?在
CATCH
中使用
XACT\u STATE()
检查并处理相应的中止和不可模仿的事务。不管怎样,为什么要使用
选择1/0
?我想它会将
插入回滚到@ErrorTable…
also@lad2025不,没有t@Abhishek实际上,我使用select 1/0作为虚拟异常。但是代码在fe处抛出RTE“执行后的事务计数表明开始和提交的数量不匹配”您是否阅读并检查了以下内容:尝试通过注释
EXEC RPM\u PROC\u INSERT\u AUDIT…
1
start
1

(1 row(s) affected)

(0 row(s) affected)
1
catch called

(1 row(s) affected)
1
inserted

(0 row(s) affected)