declare @x int
set @x = 1
declare @j int
set @j = 10
begin transaction
set @j = 100
if @x<>0
begin
rollback transaction
set @x = 2
end
else
commit transaction
print @j
print @x这里的 if条件 明明成立的但为什么 回滚操作好像没效果print @j 和 print @x 打印出来的仍旧是 100 和 2 为什么?
set @x = 1
declare @j int
set @j = 10
begin transaction
set @j = 100
if @x<>0
begin
rollback transaction
set @x = 2
end
else
commit transaction
print @j
print @x这里的 if条件 明明成立的但为什么 回滚操作好像没效果print @j 和 print @x 打印出来的仍旧是 100 和 2 为什么?
CREATE TABLE #j (j INT)INSERT #x SELECT 1
INSERT #j SELECT 10
BEGIN TRANSACTION
UPDATE #j SET j = 100
IF 1=1
BEGIN
ROLLBACK TRANSACTION
UPDATE #x SET x = 2
END
ELSE
COMMIT TRANSACTIONSELECT * FROM #x
/*
x
-----------
2(1 行受影响)
*/
SELECT * FROM #j
/*
j
-----------
10(1 行受影响)
*/DROP TABLE #x,#j变量好像不能回滚
@j,@x这个两个是变量,并非数据库的数据
另外,楼主给出的,set @i=2这个语句本身也不再事务回滚的范围内。呵呵