zoukankan      html  css  js  c++  java
  • SQL Server 触发器、事务、以及存储过程详解

    触发器(trigger)

    在使用触发器的同时一般会牵扯到两张表,这两张表只读且是虚拟的表一个是inserted(增加表)另外一个是deleted(删除表)

    这两张表的结果总是与被改触发器应用的表的结构相同。当触发器完工后,这两张表就会被删除inseted是存插入和修改的数据,deleted则是存储

    删除的的数据

    语法:  create  trigger  tgr_name(触发器名称)

                 on table_name(表名)

                 with encrypion  --加密触发器

                 for  update(insert、delete等) 

                 as   

               Transact-SQL( 一些SQL语句、类似于下面这这串代码)

    --定义变量
    declare @password varchar(20),@UserName varchar(20), @temp int,@birthday datetime;
    --在 inserted(虚拟表)表中查询已经插入的记录信息
    select @password=password,@UserName=UserName,@birthday=Birthday,@temp=Gender from inserted;
    -- set @UserName=@UserName+CONVERT(varchar,@password);
    --set @temp=@password/2;
    insert into SYS_Users(UserName,Password,Gender,Birthday) values(@UserName,@password,@temp,@birthday);
    --打印信息提示成功
    print '添加用户成功'

    删除触发器T-SQL语句备份解析

    例子:  SYS_Users 表名 .'U'指类型表

    as
      print '备份数据库中.......';
      if(OBJECT_ID('SYS_Users','U')is not null)
      --存在SYS_Users 表,直接插入数据
      insert into SYS_Users select UserName,[Password],Gender,Birthday,CreateDate,IsDelete from deleted
      else
      --不存在classesBackup创建再插入
       select * into SYS_Users1 from deleted;
       print '备份数据成功!';
    insert into SYS_Users select UserName,[Password],Gender,Birthday,CreateDate,IsDelete from deleted
    上面这串代码表示在 SYS_Users 插入 deleted 的信息,也就是删除的的数据从而达到了备份的效果
     select * into SYS_Users1 from deleted;
    上面这串语句表示 创建一张和deleted数据结构相同的新表,表的名称为 SYS_Users1,并且将deleted里面的数据添加到 SYS_User1表中



    事务(tran)

    BEGIN TRAN Tran_Money(事务名称)
    declare @tran_error int;
    set @tran_error=0
    BEGIN TRY
    Update SYS_User Set Money+=30 WHERE UserName='小明'
    set @tran_error+=@@ERROR
    Update SYS_User Set Money-=30 WHERE UserName='小芳'
    set @tran_error+=@@ERROR
    END TRY

    BEGIN CATCH
    Print '出现异常,自动回滚:'+convert(vachar,error_number())+'错误消息'+error_message()
    SET @tran_error = @tran_error + 1
    END  CATCH
    if(@tran_error>0)
    BEGIN
    ROLLBACK TRAN;、(回滚事务)
    PRINT '转账失败'
    END
    ELSE
    BEGIN
    COMMIT tran ; (提交事务)
    PRINT '转账成功'
    END
  • 相关阅读:
    UML基础—结构和组成
    Hadoop完全分布式
    Hadoop完全分布式
    查看端口是否启用
    查看端口是否启用
    hadoop namenode启动失败
    hadoop namenode启动失败
    Hadoop2.7.5伪分布式安装
    Hadoop2.7.5伪分布式安装
    给用户添加sudo权限
  • 原文地址:https://www.cnblogs.com/XiangZiPeng/p/11133528.html
Copyright © 2011-2022 走看看