在下面的代码中,我试图在迭代中使用事务。
Declare @i int, @TRAN_NAME varchar(40)
Declare @TMPTABLE TABLE(pk int unique)
Set @i = 0
While @i < 5 Begin
BEGIN TRY
Set @TRAN_NAME = CONVERT(varchar(20), @i)
BEGIN TRAN @TRAN_NAME
INSERT @TMPTABLE
VALUES(@i)
if @i = 3 Begin
INSERT @TMPTABLE
VALUES(@i)
End
COMMIT TRAN @TRAN_NAME
END TRY
BEGIN CATCH
ROLLBACK TRAN @TRAN_NAME
DECLARE @msg varchar(1000) = ERROR_MESSAGE()
RAISERROR(@msg,16,1)
END CATCH
Set @i = @i + 1
End
Select * from @TMPTABLE
问题是,我从下面的代码中得到的查询返回了以下结果:
pk
0
1
2
3
4
但问题是,由于我故意尝试在迭代中插入一个 pk 我不希望它插入值和它之前的值,如代码中那样,结果不应该有 3,因为它将是被事务回滚,但它仍然插入 3。