当前位置:  数据库>sqlserver

经常用到的SQL Server事务处理

    来源: 互联网  发布时间:2014-08-29

    本文导语:  经常用到的SQL Server事务处理,记录一下,有需要的朋友也可以参考下。 一、事务说明 事务是对数据库执行的一个操作单位 Commit Tran: 用于提交事务,将所做的修改保存到数据库。 Rollback Tran: 用于回滚事务,撤销还没有保存...

经常用到的SQL Server事务处理,记录一下,有需要的朋友也可以参考下。

一、事务说明

事务是对数据库执行的一个操作单位
Commit Tran: 用于提交事务,将所做的修改保存到数据库。
Rollback Tran: 用于回滚事务,撤销还没有保存到数据库的命令。
SAVE TRAN : 退回到指定的事务保存点.

二、创建相关表的脚本

代码如下:

--DROP TABLE dbo.tbTest1
--DROP TABLE dbo.tbTest2

CREATE TABLE [dbo].[tbTest1](
    [Id] [int] PRIMARY KEY NOT NULL ,
    [Name] [varchar](50) NOT NULL
 )

CREATE TABLE [dbo].[tbTest2](
    [Id] [int] PRIMARY KEY NOT NULL ,
    [Category] [varchar](50) NOT NULL
    )

三、几种写法的测试事务脚本

代码如下:

----SQL事务处理的写法--------1.测试事务方法
/*
(1)当第一条有效,第2条有误时,会保证2条记录都不写入数据库
*/
INSERT INTO dbo.tbTest2(Id, Category )VALUES (1,'222_old' )
BEGIN TRAN
    INSERT INTO dbo.tbTest1(Id, Name )VALUES  (1,'111' )
    IF @@ERROR0 ROLLBACK TRAN

    INSERT INTO dbo.tbTest2(Id, Category )VALUES (1,'222' )
    IF @@ERROR0 ROLLBACK TRAN

COMMIT TRAN

/*
(2)当第一条有误,第2条有效时,第一条不写入数据库,第2条写入数据库
*/
INSERT INTO dbo.tbTest1(Id, Name )VALUES  (2,'111_old' )
BEGIN TRAN
    INSERT INTO dbo.tbTest1(Id, Name )VALUES  (2,'111' )
    IF @@ERROR0 ROLLBACK TRAN

    INSERT INTO dbo.tbTest2(Id, Category )VALUES (2,'222' )
    IF @@ERROR0 ROLLBACK TRAN

COMMIT TRAN

--2.保存所有的数据都事务同步(方法1)
/*
  不管哪条数据有问题,都能保证不写入数据库
*/
DECLARE @ErrorNum INT
SET @ErrorNum = 0

BEGIN TRAN tempTran
INSERT INTO dbo.tbTest1(Id, Name )VALUES  (3,'111' )
set @ErrorNum=@ErrorNum + @@error

INSERT INTO dbo.tbTest2(Id, Category )VALUES (2,'222' )
set @ErrorNum=@ErrorNum + @@error

IF @ErrorNum > 0
    ROLLBACK TRAN
ELSE
  COMMIT TRAN
 
 --3.保存所有的数据都事务同步(方法2)
  /*
   不管哪条数据有问题,都能保证不写入数据库
*/
BEGIN TRY
    BEGIN TRAN tempTran
   
        INSERT INTO dbo.tbTest1(Id, Name )VALUES  (4,'111' )

        INSERT INTO dbo.tbTest2(Id, Category )VALUES (2,'222' )
       
    COMMIT TRAN tempTran
   
 END TRY
 BEGIN CATCH
    RAISERROR 50005N'have error,please check.'
    ROLLBACK TRAN tempTran
END CATCH

四、退回到事务指定的保存点

代码如下:

--4.退到指定的事务保存点
/*
ISOLATION LEVEL:设置数据隔离级别:
REPEATABLE READ:锁定查询中使用的所有数据以防止其他用户更新、删除数据等,但是其他用户可以将新的幻像行插入数据集
*/
--SET TRANSACTION ISOLATION LEVEL   REPEATABLE READ
BEGIN TRAN

    SAVE TRAN sp1
   
    INSERT INTO dbo.tbTest1(Id, Name )VALUES  (6,'111' )
    SAVE TRAN sp2
   
    INSERT INTO dbo.tbTest2(Id, Category )VALUES (7,'222' )
    SAVE TRAN sp3
   
    INSERT INTO dbo.tbTest1(Id, Name )VALUES  (8,'111' )
    SAVE TRAN sp4
   
    --DECLARE @tempId INT
    --SET @tempId = 0
   
    --SELECT @tempId = Id FROM dbo.tbTest2 WHERE Id =5
    --IF @tempId


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求教:给你一个程序,怎样判断它用到了哪些库
  • Linux里哪些地方用到多线程编程?高分求
  • 软件开发dailybuilder一般都会用到那些命令啊.
  • jquery iis7站长之家
  • 调查:请问各位在开发中有多少人能真正用到EJB?
  • linux系统中有哪些命令要用到proc文件系统?
  • 看了很多关于sudo命令的资料,还是不知道sudo什么情况下会用到?
  • 请解释一下Applet中经常用到的size.width(),size.height()
  • 用到swing中类的applet都要转换吗?
  • 急急急!!!用到parseInt函数应该import java.lang.*;是吗?为何有错呢?
  • 请问这段代码用到哪些知识?哪里有介绍?
  • ###做程序需要用到java duke的图标,知道哪里有下载吗(除了JDK里带的)
  • 新手:最近用到JFrame,但是好象Frame也有同样的功能,请高手指点?
  • Applet能用到session方法吗?
  • 我的applet中需要用到jb的一些类,请问怎样用这些类?
  • 编程实现Copy命令,主要用到什么函数?
  • 编程实现ls命令,主要用到什么函数?
  • 用到什么类、方法?3ks!
  • 不再用到的对象要置成null,请举个例子
  • 请问,如何知道一个应用程序用到了那个库函?




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3