34,590
社区成员
发帖
与我相关
我的任务
分享
BEGIN TRANSACTION exampletrans -- 开始一个事务
USE 销售管理
GO
UPDATE 员工 --执行一次更新操作
SET 基本工资=基本工资*1.1
WHERE 部门号='40'
GO
SAVE TRANSACTION change
UPDATE 员工 --第二次执行更新操作
SET 基本工资=基本工资*1.1
WHERE 职务='经理'
GO
ROLLBACK TRANSACTION change --回滚到保存点
PRINT '程序继续执行!'
COMMIT TRANSACTION
/*
这个例子一共执行两次更新操作,第一次操作完成后,设置一个保存点;第二次更新操作执行之后,程序执行了事务回滚,使得第二次更新操作被取消,但是第一次操作依然有效,程序继续从回滚处执行,打印出一行字
注意:ROLLBACK ROLLBACK TRAN ROLLBACK TRANSACTION 三种写法作用一样
*/
--test
create table tb(id int)
begin tran t1
insert into tb select 1
save tran t1
insert into tb select 2
rollback tran t1
select * from tb
/*
id
-----------
1
(1 行受影响)
*/
drop table tb
USE tempdb;
GO
CREATE TABLE ValueTable ([value] int;)
GO
DECLARE @TransactionName varchar(20) = 'Transaction1';
--The following statements start a named transaction,
--insert two rows, and then roll back
--the transaction named in the variable @TransactionName.
--Another statement outside of the named transaction inserts two rows.
--The query returns the results of the previous statements.
BEGIN TRAN @TransactionName
INSERT INTO ValueTable VALUES(1), (2);
ROLLBACK TRAN @TransactionName;
INSERT INTO ValueTable VALUES(3),(4);
SELECT [value] FROM ValueTable;
DROP TABLE ValueTable;
--Results
--value
-------------
--3
--4