sql server事务的使用是为了确保数据的一致性。
标志一个成功的隐性事务或显式事务的结束。 如果 @ @TRANCOUNT 为1,则 COMMIT TRANSACTION 使得自从事务开始后进行的所有数据修改成为数据库的永久部分,释放事务的资源,并将 @ @TRANCOUNT 减为0。 如果 @ @TRANCOUNT 大于1,则 COMMIT TRANSACTION 会将 @ @TRANCOUNT 减为1,并且事务将保持活动状态。
将显式事务或隐性事务回滚到事务的起点或事务内的某个保存点。 可以使用 ROLLBACK TRANSACTION 清除自事务的起点或到某个保存点所做的所有数据修改。 它还释放由事务控制的资源。
这不包括对局部变量或表变量所做的更改。 该语句不会清除这些更改。
BEGIN TRANSACTION 语句将 @@TRANCOUNT 增加 1。 ROLLBACK TRANSACTION @@TRANCOUNT为 0,但 ROLLBACK TRANSACTIONsavepoint_name,这不会影响@@TRANCOUNT。 COMMIT TRANSACTION 或 COMMIT WORK 将 @@TRANCOUNT 递减 1。
A. 使用显式事务
下面写法存在隐患,当操作(增删改)是由null引发的错误时,事务会跳过错误继续执行正常的语句
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT;
B. 回滚事务
CREATE TABLE ValueTable (id INT);
BEGIN TRANSACTION;
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
ROLLBACK;C. 命名事务
DECLARE @TranName VARCHAR(20);
SELECT @TranName = 'MyTransaction';
BEGIN TRANSACTION @TranName;
USE AdventureWorks2012;
DELETE FROM AdventureWorks2012.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION @TranName;
GOD. 标记事务
BEGIN TRANSACTION CandidateDelete
WITH MARK N'Deleting a Job Candidate';
GO
USE AdventureWorks2012;
GO
DELETE FROM AdventureWorks2012.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
GO
COMMIT TRANSACTION CandidateDelete;
GOE. 异常处理 begin try...end try...begin catch...end catch
begin tran
begin try
--sql语句1
--sql语句2
--sql语句3
end try
begin catch
if @@trancount>
rollback tran
end catch
if @@trancount>
commit tran引用:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3166513/ ,如需转载,请注明出处,否则将追究法律责任。