精华内容
下载资源
问答
  • SQL Sever触发器

    2014-07-15 11:04:20
    大学计算机科学与技术课程PPT,SQL Sever 触发器的讲义
  • SQL Sever 触发器

    热门讨论 2017-10-28 17:29:10
    学习数据库视频的时候看到看触发器

             触发器是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对一个表进行操作( insert,delete, update)时就会激活它执行,触发器经常用于加强数据的完整性约束和业务规则等。其实往简单了说,就是触发器就是一个开关,负责灯的亮与灭,你动了,它就亮了,就这个意思。

    触发器的优点:1.触发器自动执行。

                2.可以通过数据库中的相关表进行层叠更改。比直接把代码写在前台的做法更安全合理。

                3.可以强制限制,比CHECK约束所定义的更复杂。更具有数据完整性。

    触发器的作用:1.可在写入数据表前,强制检验或转换数据。

                2.触发器发生错误时,异动的结果会被撤销。

                3.部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。

                4.可依照特定的情况,替换异动的指令 (INSTEAD OF)。

    触发器的种类:

    DML触发器
    通常说的DML触发器包括三种,INSERT触发器、UPDATE触发器,DELETE触发器。可以查询其他表,还可以包含复杂的Transact-sql语句。DML触发器的主要作用在于强制执行业 务规则,以及扩展Sql Server约束,默认值等。因为我们知道约束只能约束同一个表中的数据,而触发器中则可以执行任意Sql命令。
    DDL触发器
    主要用于审核与规范对数据库中表,触发器,视图等结构上的操作。比如在修改表,修改列,新增表,新增列等。它在数据库结构发生变化时执行,我们主要用它来记录数据库的修改过程,以及限制程序员对数据库的修改,比如不允许删除某些指定表等。
    语法结构:
    CREATE TRIGGER trigger_name
    ON{ table | view}
    {
        { {FOR | AFTER | INSTEAD OF }
          { [DELETE] [ , ] [INSERT] [,] [UPDATE]}
           AS
           sql_statement
      }
    }

    根据上边的语法套用就可以了

    insert 触发器

    create trigger tri_insert
    on student
    for insert
    as
    sql语句
    

    update

    查询教师信息表中被删除的教师姓名性别

    create trigger T_DELETETEA
    on 教师信息
    for delete
    as
      SELECT 姓名 AS 被删除的教师姓名,性别 FROM DELETED
    



    
    展开全文
  • SQLSever 触发器

    2016-01-04 14:58:00
    1 /*DML触发器分为: 2 3 1、 after触发器(之后触发) 4 5 a、 insert触发器 6 7 b、 update触发器 8 9 c、 delete触发器*/ 10 11 /*UPDATE 触发器创建触发的语法*/ 12 CREATE TRIGGER...
      1 /*DML触发器分为: 
      2 
      3 1、 after触发器(之后触发)
      4 
      5 a、 insert触发器
      6 
      7 b、 update触发器
      8 
      9 c、 delete触发器*/
     10 
     11 /*UPDATE 触发器创建触发的语法*/
     12 CREATE TRIGGER trigger_name
     13 ON table_name
     14 [WITH ENCRYPTION]
     15 FOR [DELETE, INSERT, UPDATE]
     16 AS
     17 --T-SQL语句
     18 GO
     19 
     20 /*创建insert触发器,在上网记录表recordInfo上创建插入触发器*/
     21 create trigger tr_insert_recordInfo
     22 on recordInfo
     23 for insert
     24 as
     25 /*定义变量,用于临时存储插入的会员号、电脑编号和卡的编号*/
     26 declare @cardId char(10)
     27 declare @PCId int
     28 declare @CardNumber char(10)
     29 /*从inserted临时表中获取插入的记录行的信息,包括电脑的编号、卡的编号*/
     30 select @PCId=PCId,@cardId=CardId from inserted
     31 /*根据电脑编号修改电脑的使用状态*/
     32 update PCInfo set PCUse=1 where PCId=@PCId
     33 /*根据卡的编号查询会员号*/
     34 select @CardNumber=CardNumber from cardinfo where CardId=@cardid
     35 /*显示上机成功的信息*/
     36 print '上机成功!会员号是:'+@CardNumber+'机器号是:'+convert(char(10),@PCId)
     37 go
     38 ----插入测试数据,会员号为的上机
     39 set nocount on --不显示sql语句影响的记录行数
     40 declare @CardId int ---声明一个存储卡的编号的变量
     41 ---根据会员号查处卡的编号
     42 select @cardId=cardid from cardinfo where cardNumber='c' 
     43 ---向recordInfo表中插入一条记录信息,卡的编号、电脑编号和上机时间
     44 insert into recordInfo(cardId,PCId,beginTime) values(@cardId,,getDate())
     45 ----查看结果
     46 select * from recordInfo
     47 select * from PCInfo
     48 go
     49 
     50 ---创建delete触发器,在上网记录表RecordInfo上创建删除触发器
     51 create trigger tr_delete_recordInfo
     52 on recordInfo
     53 for delete
     54 as
     55 if exists(select * from sysobjects where name='backRecordInfo')
     56 ----如果backrecordInfo表存在,就添加记录即可
     57 insert into backRecordInfo select * from deleted
     58 else
     59 ----创建backRecordInfo表,从deleted中获取被删除的数据
     60 select * into backRecordInfo from deleted
     61 print'backRecordInfo表备份数据成功,备份表中的数据为:'
     62 select * from backRecordInfo
     63 go
     64 ----测试delete触发器,删除数据
     65 set nocount on
     66 delete from recordInfo
     67 ---查看结果
     68 print'记录表中的数据为:'
     69 select * from recordInfo
     70 go
     71 
     72 ----update触发器示例
     73 create trigger tr_update_recordInfo
     74 on recordInfo
     75 for update
     76 as
     77 declare @beforePCId int
     78 declare @afterPCId int
     79 select @beforePCId =PCId from deleted
     80 select @afterPCId=PCID from inserted
     81 ---根据电脑编号修改使用状态-----
     82 ---根据以前使用的电脑编号把电脑的使用状态改为:
     83 update PCInfo set PCUse=0 where PCId=@beforePCId
     84 ---根据现在使用的电脑编号把电脑的使用状态改为:
     85 update PCInfo set PCUse=1 where PCId=@afterPCId
     86 ----显示电脑换机成功
     87 print'换机成功!从'+convert(varchar(10),@beforePCId)+'号电脑换到'+convert(varchar(10),@afterPCId)+'号电脑'
     88 go
     89 /*测试update触发器,修改电脑编号*/
     90 --显示更改前,记录表中的数据
     91 print'更改前,记录表中的数据'
     92 select * from recordInfo
     93 --显示更改前,电脑表中的数据
     94 print'更改前,电脑表中的数据'
     95 select * from PCInfo
     96 set nocount on
     97 ---把电脑号为的改为
     98 update recordInfo set PCId= where PCId= 
     99 ---查看结果
    100 print'更改后,记录表中的数据'
    101 select * from recordInfo
    102 print'更改后,电脑表中的数据'
    103 select * from PCInfo
    104 
    105 --instead of 触发器可以同时在数据表和视图中使用。通常在以下几种情况下,建议使用instead of触发器: 
    106 --1、数据库里的数据禁止修改:例如电信部门的通话记录是不能修改的,一旦修改,则通话费用的计数将不准确。 
    107 --2、有可能要回滚修改的SQL语句
    108 --3、在视图中使用触发器
    109 --4、用自己的方式去修改数据
    110 ----instead of触发器示例
    111 ---创建update触发器,在上网记录表recordInfo上创建修改(列)触发器
    112 create trigger tr_updateColum1_recordInfo
    113 on recordInfo
    114 instead of insert
    115 as
    116 declare @cardbalance int --声明用于存储用户余额的变量
    117 declare @CardId int --声明用于存储用户卡的编号的变量
    118 declare @PCId int --声明用于存储电脑编号的变量
    119 ---inserted临时表中获取插入的记录行信息,包括电脑编号、卡的编号
    120 select @cardId=cardId,@PCId=PCId from inserted
    121 select @cardbalance=cardBalance from cardInfo where CardId=@CardId
    122 print'您的余额为:'+convert(varchar(10),@cardBalance) ---打印余额信息
    123 if(@cardBalance<2) ---判断余额多少,看能否正常上机
    124 print'余额小于元,不能上机。请尽快充值!'
    125 else
    126 ----根据电脑的编号修改电脑的使用状态更改为正在使用
    127 update PCInfo set PCUse=1 where PCId=@PCId
    128 ----向recordInfo表插入上机记录
    129 insert into recordInfo(cardId,PCId,beginTime)values(@CardId,@PCId,getdate())
    130 print'上机成功'
    131 go
    132 -------关键代码------
    133 set nocount on
    134 declare @cardId int ---声明一个存储卡的编号的变量
    135 ---根据会员号查出卡的编号
    136 select @cardId=cardId from cardInfo where cardNumber='c001'
    137 ----向recordInfo表中插入一条记录信息,卡的编号、电脑的编号和上机时间
    138 insert into recordInfo(cardId,PCId,beginTime)values(@cardId,1,getdate())
    139 select * from recordInfo
    140 select * from PCInfo
    141 go

     

    转载于:https://www.cnblogs.com/ziranquliu/p/5458441.html

    展开全文
  • sql sever 触发器

    2015-12-14 21:44:40
    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。 Ø 什么是触发器  触发器对表进行插入、...

    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。

    Ø 什么是触发器

        触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作。诸如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。

     

        DML触发器分为:

        1、 after触发器(之后触发)

            a、 insert触发器

            b、 update触发器

            c、 delete触发器

     

        2、 instead of 触发器 (之前触发)

     

        其中after触发器要求只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上。而instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身。既可以在表上定义instead of触发器,也可以在视图上定义。

     

        触发器有两个特殊的表:插入表(instered表)和删除表(deleted表)。这两张是逻辑表也是虚表。有系统在内存中创建者两张表,不会存储在数据库中。而且两张表的都是只读的,只能读取数据而不能修改数据。这两张表的结果总是与被改触发器应用的表的结构相同。当触发器完成工作后,这两张表就会被删除。Inserted表的数据是插入或是修改后的数据,而deleted表的数据是更新前的或是删除的数据。

     

    对表的操作

    Inserted逻辑表

    Deleted逻辑表

    增加记录(insert)

    存放增加的记录

    删除记录(delete)

    存放被删除的记录

    修改记录(update)

    存放更新后的记录

    存放更新前的记录

        Update数据的时候就是先删除表记录,然后增加一条记录。这样在inserted和deleted表就都有update后的数据记录了。注意的是:触发器本身就是一个事务,所以在触发器里面可以对修改数据进行一些特殊的检查。如果不满足可以利用事务回滚,撤销操作。

     

    Ø 创建触发器

        语法

    create trigger tgr_name
    on table_name
    with encrypion –加密触发器
        for update...
    as
        Transact-SQL

        # 创建insert类型触发器

    --创建insert插入类型触发器
    if (object_id('tgr_classes_insert', 'tr') is not null)
        drop trigger tgr_classes_insert
    go
    create trigger tgr_classes_insert
    on classes
        for insert --插入触发
    as
        --定义变量
        declare @id int, @name varchar(20), @temp int;
        --在inserted表中查询已经插入记录信息
        select @id = id, @name = name from inserted;
        set @name = @name + convert(varchar, @id);
        set @temp = @id / 2;    
        insert into student values(@name, 18 + @id, @temp, @id);
        print '添加学生成功!';
    go
    --插入数据
    insert into classes values('5班', getDate());
    --查询数据
    select * from classes;
    select * from student order by id;

         insert触发器,会在inserted表中添加一条刚插入的记录。

     

        # 创建delete类型触发器

    --delete删除类型触发器
    if (object_id('tgr_classes_delete', 'TR') is not null)
        drop trigger tgr_classes_delete
    go
    create trigger tgr_classes_delete
    on classes
        for delete --删除触发
    as
        print '备份数据中……';    
        if (object_id('classesBackup', 'U') is not null)
            --存在classesBackup,直接插入数据
            insert into classesBackup select name, createDate from deleted;
        else
            --不存在classesBackup创建再插入
            select * into classesBackup from deleted;
        print '备份数据成功!';
    go
    --
    --不显示影响行数
    --set nocount on;
    delete classes where name = '5班';
    --查询数据
    select * from classes;
    select * from classesBackup;

       delete触发器会在删除数据的时候,将刚才删除的数据保存在deleted表中。

     

        # 创建update类型触发器

    --update更新类型触发器
    if (object_id('tgr_classes_update', 'TR') is not null)
        drop trigger tgr_classes_update
    go
    create trigger tgr_classes_update
    on classes
        for update
    as
        declare @oldName varchar(20), @newName varchar(20);
        --更新前的数据
        select @oldName = name from deleted;
        if (exists (select * from student where name like '%'+ @oldName + '%'))
            begin
                --更新后的数据
                select @newName = name from inserted;
                update student set name = replace(name, @oldName, @newName) where name like '%'+ @oldName + '%';
                print '级联修改数据成功!';
            end
        else
            print '无需修改student表!';
    go
    --查询数据
    select * from student order by id;
    select * from classes;
    update classes set name = '五班' where name = '5班';

         update触发器会在更新数据后,将更新前的数据保存在deleted表中,更新后的数据保存在inserted表中。

     

        # update更新列级触发器

    if (object_id('tgr_classes_update_column', 'TR') is not null)
        drop trigger tgr_classes_update_column
    go
    create trigger tgr_classes_update_column
    on classes
        for update
    as
        --列级触发器:是否更新了班级创建时间
        if (update(createDate))
        begin
            raisError('系统提示:班级创建时间不能修改!', 16, 11);
            rollback tran;
        end
    go
    --测试
    select * from student order by id;
    select * from classes;
    update classes set createDate = getDate() where id = 3;
    update classes set name = '四班' where id = 7;
    

         更新列级触发器可以用update是否判断更新列记录;

     

        # instead of类型触发器

           instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身的内容。

           创建语法

    create trigger tgr_name
    on table_name
    with encryption
        instead of update...
    as
        T-SQL

       

          # 创建instead of触发器

    if (object_id('tgr_classes_inteadOf', 'TR') is not null)
        drop trigger tgr_classes_inteadOf
    go
    create trigger tgr_classes_inteadOf
    on classes
        instead of delete/*, update, insert*/
    as
        declare @id int, @name varchar(20);
        --查询被删除的信息,病赋值
        select @id = id, @name = name from deleted;
        print 'id: ' + convert(varchar, @id) + ', name: ' + @name;
        --先删除student的信息
        delete student where cid = @id;
        --再删除classes的信息
        delete classes where id = @id;
        print '删除[ id: ' + convert(varchar, @id) + ', name: ' + @name + ' ] 的信息成功!';
    go
    --test
    select * from student order by id;
    select * from classes;
    delete classes where id = 7;

       

          # 显示自定义消息raiserror

    if (object_id('tgr_message', 'TR') is not null)
        drop trigger tgr_message
    go
    create trigger tgr_message
    on student
        after insert, update
    as raisError('tgr_message触发器被触发', 16, 10);
    go
    --test
    insert into student values('lily', 22, 1, 7);
    update student set sex = 0 where name = 'lucy';
    select * from student order by id;

        # 修改触发器

    alter trigger tgr_message
    on student
    after delete
    as raisError('tgr_message触发器被触发', 16, 10);
    go
    --test
    delete from student where name = 'lucy';

        # 启用、禁用触发器

    --禁用触发器
    disable trigger tgr_message on student;
    --启用触发器
    enable trigger tgr_message on student;

        # 查询创建的触发器信息

    --查询已存在的触发器
    select * from sys.triggers;
    select * from sys.objects where type = 'TR';
    
    --查看触发器触发事件
    select te.* from sys.trigger_events te join sys.triggers t
    on t.object_id = te.object_id
    where t.parent_class = 0 and t.name = 'tgr_valid_data';
    
    --查看创建触发器语句
    exec sp_helptext 'tgr_message';

        # 示例,验证插入数据

    if ((object_id('tgr_valid_data', 'TR') is not null))
        drop trigger tgr_valid_data
    go
    create trigger tgr_valid_data
    on student
    after insert
    as
        declare @age int,
                @name varchar(20);
        select @name = s.name, @age = s.age from inserted s;
        if (@age < 18)
        begin
            raisError('插入新数据的age有问题', 16, 1);
            rollback tran;
        end
    go
    --test
    insert into student values('forest', 2, 0, 7);
    insert into student values('forest', 22, 0, 7);
    select * from student order by id;

        # 示例,操作日志

    if (object_id('log', 'U') is not null)
        drop table log
    go
    create table log(
        id int identity(1, 1) primary key,
        action varchar(20),
        createDate datetime default getDate()
    )
    go
    if (exists (select * from sys.objects where name = 'tgr_student_log'))
        drop trigger tgr_student_log
    go
    create trigger tgr_student_log
    on student
    after insert, update, delete
    as
        if ((exists (select 1 from inserted)) and (exists (select 1 from deleted)))
        begin
            insert into log(action) values('updated');
        end
        else if (exists (select 1 from inserted) and not exists (select 1 from deleted))
        begin
            insert into log(action) values('inserted');
        end
        else if (not exists (select 1 from inserted) and exists (select 1 from deleted))
        begin
            insert into log(action) values('deleted');
        end
    go
    --test
    insert into student values('king', 22, 1, 7);
    update student set sex = 0 where name = 'king';
    delete student where name = 'king';
    select * from log;
    select * from student order by id;
    展开全文
  • sql sever 触发器知识总结及实验一、基础知识二、sql语句总结三、实验题目及解答 一、基础知识 Ⅰ 定义 触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程。 触发器保存在数据库服务器中 任何用户...

    一、基础知识

    Ⅰ 定义
    触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程。

    1. 触发器保存在数据库服务器中
    2. 任何用户对表的增、删、改操作均由服务器自动激活相应的触发器
    3. 触发器可以实施更为复杂的检查和操作,具有更精细和更强大的数据控制能力

    Ⅱ 分类
    按照触发事件的语言分类,可以将触发器分成DML触发器和DDL触发器。

    1. DML触发器是指可以被对数据表的insert、update和delete操作所触发的触发器。
    2. DDL触发器是指可以被对数据库对象的create、alter和drop操作所触发的触发器。

    按照触发器的触发和执行事件的不同,可以分为after类型触发器和instead of类型触发器。

    1. after类型触发器又被称为后触发触发器,把触发触发器执行的insert、update或者delet语句所代表的事件称为“触发事件”。after类型触发器即是指“触发事件”成功执行完毕后,“被触发事件”执行的触发器。
    2. instead of类型触发器又被称为替换触发器。简单的说,instead of类型的触发器当“触发事件”发生时,系统并不执行“触发事件”的具体操作(比如insert、update或者delete数据),而是直接执行“被触发事件”。

    二、sql语句总结

    Ⅰ 创建

    create trigger <触发器名>
    on <表名>
    [with encryption] --对创建触发器的文本加密
    after|instead of <update|insert|delete>
    as
    <T-sql语句>
    

    注意:

    1. after类型的触发器只能创建在数据表上,而不能创建在视图上。
    2. instead of类型的触发器可以定义在表上和视图上。对于每个触发操作(insert、update或delete)只能定义一个instead of类型触发器。
    3. 一张数据表可以创建多个因同一触发操作而生成的触发器。
    4. inserted表和deleted表
      inserted表和deleted表是系统为每个触发器准备的临时表,存放于内存中。
      当触发器被触发执行时,inserted表和deleted表将记录触发器执行过程中涉及到的每条记录信息,以方便用户使用和查询。inserted表和deleted表中的记录只能查看,不能修改,当触发器执行完毕后,与之相关的临时表也随之删除。inserted表用来存放当触发操作为insert命令时所产生的数据信息。deleted表用来存放当触发操作为delete命令时所产生的数据信息。update作为修改操作,即相当于删除数据再添加数据,因此,当触发操作为update命令时,既生成deleted表又生成inserted表。

    Ⅱ 查看与重命名

    exec sp_helptrigger ‘<表名>[,<类型>]
    exec sp_rename <oldname>,<newname>
    exec sp_help ‘<触发器名>--查看所有者、创建日期等
    

    Ⅲ 禁用和启用

    alter table <表名>
    enable|disable trigger <触发器名>
    

    Ⅳ 删除

    drop trigger <触发器名> on <表名>
    

    三、实验题目及解答

    dz表
    基本表一
    ts表
    基本表二
    jy表
    基本表三

    1、为dz表和ts表设计插入触发器dz_insert和ts_insert,分别在插入记录后提示“借书证号为XXXX的读者记录已被插入”或“总编号为XXXX的图书记录已被插入”,其中XXXX为插入的具体字段值;写一条insert语句,插入记录,对插入触发器进行测试。

    --------创建dz的插入触发器----------
    create trigger dz_insert
    on dz
    for insert
    as
    declare @id_no nvarchar(10)
    select @id_no=借书证号 from inserted
    print '借书证号为'+@id_no+'的读者记录已被插入'
    
    --------dz插入触发器的测试----------
    insert into dz
    values('999','信息系','ceshi','男',1999-07-01,'教授','1号楼424')
    
    --------创建ts的插入触发器----------
    create trigger ts_insert
    on ts
    for insert
    as
    declare @book_no nvarchar(10)
    select @book_no=总编号 from inserted
    print '总编号为'+@book_no+'的图书记录已被插入'
    
    --------ts插入触发器的测试----------
    insert 
    into ts
    values('999999','ceshi','张三','电子工业出版社','TP',24)
    

    2、为图书表设置更新触发器,根据图书编号来更新书名、作者、出版社、分类号和单价(根据图书编号找到相应记录,然后更新书名、作者等信息),更新完毕后提示“更新后的总编号为:XX,书名为:XX,作者为:XX,出版社为:XX,分类号为:XX,单价为:XX”(其中XX代表相应字段的值);输入update语句,例如将图书编号为J007的图书名改为网络安全基础,测试更新触发器。

    --------创建ts更新触发器----------
    create trigger ts_update1
    on ts
    for update
    as
    declare @no nvarchar(10)
    declare @book nvarchar(10)
    declare @author nvarchar(4)
    declare @publisher nvarchar(10)
    declare @class nvarchar(2)
    declare @price real
    select @no=总编号,@book=书名,@author=作者,@publisher=出版单位,@class=分类号,@price=单价 from inserted
    print '更新后的总编号为:'+@no+',书名为:'+@book+',作者为:'+@author+',出版社为:'+@publisher+',分类号为:'+@class+',单价为:'+cast(@price as varchar)
    
    --------测试ts更新触发器----------
    update ts
    set 书名='大学英语(一)'
    where 总编号='113388'
    

    3、为图书表设置更新触发器,根据总编号来更新书名、作者、出版社、分类号和单价(根据总编号找到相应记录,然后更新书名、作者等信息),更新完毕后提示“图书表更新成功”;编写测试语句进行测试。

    --------创建ts更新触发器2----------
    create trigger ts_update2
    on ts
    for update
    as
    print('图书表更新成功!')
    
    --------测试ts更新触发器----------
    update ts
    set 书名='大学英语(二)'
    where 总编号='113388'
    
    

    4、为dz表和ts设置删除触发器,若删除dz记录或ts记录,则jy表中的相关读者记录或书籍的记录也应删除,并提示“dz(或ts)表和jy表相关记录已一并删除” ;编写测试语句进行测试。

    --------创建ts删除触发器----------
    create trigger dz_delete
    on dz
    for delete
    as
    delete
    from jy
    where 借书证号 in (select 借书证号 from deleted)
    print 'dz表和jy表相关记录已一并删除'
    
    --------测试ts删除触发器----------
    delete
    from dz
    where 借书证号='112'
    
    --------创建dz删除触发器----------
    create trigger ts_delete
    on ts
    for delete
    as
    delete
    from jy
    where 总编号 in (select 总编号 from deleted)
    print 'ts表和jy表相关记录已一并删除'
    
    --------测试dz删除触发器----------
    delete
    from ts
    where 总编号='332211'
    

    5、为ts创建instead of 触发器,当删除某条记录时,显示“对不起,不允许删除操作” ;编写测试语句进行测试。

    --------创建ts禁止删除触发器----------
    create trigger ts_sorry
    on ts
    instead of delete
    as
    print '对不起,不允许删除操作'
    
    --------测试ts删除触发器----------
    delete
    from ts
    where 总编号='112266'
    

    6、使用查看命令查看dz表中已创建的触发器;使用命令查看某各触发器代码。

    exec sp_helptrigger 'dz'
    
    exec sp_helptext 'dz_insert'
    exec sp_helptext 'dz_delete'
    

    7、修改某触发器的名称。

    exec sp_rename dz_insert,dz_insert_2
    
    展开全文
  • 如何使用SQL sever触发器 什么是触发器? ** 触发器是在对表进行插入、更新或删除操作时自动执行的存储过程 触发器通常用于强制业务规则 触发器是一种高级约束,可以定义比用CHECK 约束更为复杂的约束 :可执行复杂...
  • 怎么把这段mysql触发器 转成 sqlsever触发器的 ``` DROP TRIGGER IF EXISTS t_beforeinsert_on_st_pptn_r; CREATE TRIGGER t_beforeinsert_on_st_pptn_r BEFORE INSERT ON st_pptn_r FOR EACH ROW BEGIN CASE ...
  • SQL Sever触发器的基本语法与作用 本人萌新,对sql语句不是特别了解,有错误,或者解释不正确请不吝赐教,谢谢啦 什么是触发器? 触发器是在对表进行插入、更新或删除操作时自动执行的存储过程 ...
  • sql sever 触发器的使用

    2016-12-20 17:58:10
    首先说一触发器的的功能 1.强化约束。触发器能够实现比Check语句更复杂的约束 2.跟踪变化。触发器可以侦测数据库内的操作,从而不允许数据库中不经过许可的指定更新和变化。 3..级联操作。根据一个表的编花,其他...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,159
精华内容 863
关键字:

sqlsever触发器