ROLLBACK TRAN
会回滚SP中的所有内容吗? (包括对另一个SP的呼叫)
示例:
BEGIN TRAN
INSERT INTO (table1)
VALUES (1,'abc')
EXEC InsertTable2
INSERT INTO (table3)
VALUES (1,'abc')
ROLLBACK TRAN
答案 0 :(得分:5)
来自msdn
将显式或隐式事务回滚到事务的开头或事务内的保存点。您可以使用ROLLBACK TRANSACTION擦除从事务开始或保存点所做的所有数据修改。它还释放了交易所持有的资源。
所以是
答案 1 :(得分:3)
不知道InsertTable2
的定义是不可能确定的。这是一个不存在的例子。
CREATE TABLE table1
(
Num int,
String char(3)
)
GO
CREATE PROC InsertTable2
AS
COMMIT;
BEGIN TRAN;
GO
BEGIN TRAN
INSERT INTO table1
VALUES (1,'abc')
EXEC InsertTable2
INSERT INTO table1
VALUES (1,'abc')
ROLLBACK TRAN
GO
SELECT *
FROM table1
GO
DROP TABLE table1
DROP PROC InsertTable2
但假设一个明智的定义,答案是“是”
答案 2 :(得分:2)
ROLLBACK TRAN会滚动一切吗?
ROLLBACK
语句不会撤消所有内容。
例如:
CREATE TABLE CocoJambo1 (Col1 INT);
DECLARE @CocoJambo2 TABLE(Col1 INT);
BEGIN TRANSACTION;
INSERT INTO CocoJambo1 (Col1) VALUES (123);
INSERT INTO @CocoJambo2 (Col1) VALUES (123);
ROLLBACK TRANSACTION;
PRINT 'CocoJambo1 ...'
SELECT * FROM CocoJambo1;
PRINT '@CocoJambo2 ...'
SELECT * FROM @CocoJambo2;
结果:
CocoJambo1 ...
Col1
-----------
(0 row(s) affected)
@CocoJambo2 ...
Col1
-----------
123
(1 row(s) affected)
答案 3 :(得分:0)
是。它会ROLLBACK
Store Procedure
中您提到的所有内容。