Sql server 在迭代中使用事务
在下面的代码中,我尝试在迭代中使用事务Sql server 在迭代中使用事务,sql-server,Sql Server,在下面的代码中,我尝试在迭代中使用事务 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
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,我不希望它像在代码中一样在它之前插入值和值,结果不应该有一个3,因为它将被事务回滚,但它仍然插入3。事务不适用于内存中的表。如果您使用临时表
#tmp
,它将按预期工作
从
因为表变量的作用域有限,不属于
持久数据库,它们不受事务回滚的影响
另见
pk
0
1
2
3
4