sql-server - SQL服务器: inserting into a table within a transaction for logging error occurance?

标签 sql-server tsql stored-procedures logging transactions

我有一个 SP(存储过程),其中包含一些 T-SQL 语句......

所有 T-sql 语句都在事务 block 中,并且通过发生任何错误,我会回滚所有内容。

像这样:

BEGIN TRANSACTION
.....
.....
IF @X=1
BEGIN
    declare cu cursor for select col1,col2 from Table1 where Id=@Y
    open  cu
    fetch next from cuinto @A, @B
    while  @@Fetch_Status = 0
    BEGIN
         .....
        ......
        IF @@ERROR <>0
        BEGIN
            ROLLBACK TRANSACTION
            RETURN
        END
END
.....
.....

Sp 无法正常运行,我找不到它的修复内容...... 我认为通过将一些数据插入表中来记录 sp 中的每个操作是个好主意 我的问题是:

因为使用了事务,所以每次插入都会回滚......

你的意见是什么?还有其他办法吗?

谢谢

最佳答案

三件事:
1)如果没有必要,请不要使用光标。
2) 您可以使用 RAISERROR WITH LOG 进行登录或通过 inserting data into a table variable然后在回滚事务后将其插入真实表中。这是可能的,因为表变量是独立于事务的。
3) 使用try catch block

关于sql-server - SQL服务器: inserting into a table within a transaction for logging error occurance?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6327706/

相关文章:

.net - 在 SQL 数据库中表示颜色的最佳方式?

sql - 默认的 T-SQL JOIN 行为是什么,INNER 还是 OUTER?

postgresql - 原则 2 - 来自存储过程的水合

javascript - DocumentDB - 量化存储过程中的有界执行

Mysql:ER_PARSE_ERROR:从 Node js发送创建过程代码时

sql-server - 尽管安装了 SQL Server,但未安装 SQL Server PowerShell 管理单元

sql-server - 数据从 SQL Server 数据库中消失

sql - bigint 的顺序 GUID

sql - 在 SQL Server 中 not(columnName ='value' ) 和 columnName< >'value' 之间有什么区别吗?

sql-server - 优化sql脚本占用CPU资源