我有一个 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/