欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《游标和触发器》PPT课件.ppt

    • 资源ID:5548592       资源大小:327.50KB        全文页数:61页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《游标和触发器》PPT课件.ppt

    1,第10章 游标和触发器,10.1游标的定义和优点10.2 游标的应用10.3 触发器概述 10.4 创建/管理DML触发器10.5 创建DDL触发器,2,10.1 游标的定义及其优点,数据检索可以得到数据库中有关表的数据,但这些数据是作为一个结果集得到的,用户可以把这个结果集保存到一个文件里,或生成一个新表以便于以后使用。这种查询是非常重要的。但这种查询形式有一个很大的缺点,它不能对结果集中每一行的数据进行处理。使用游标可以实现对查询结果集中的数据逐行处理。10.1.1 游标的概念 游标(Cursor)是一种处理数据的方法,为了查看或者处理结果集中的数据,游标提供了在结果集中向前或者向后浏览数据的能力。可以把游标看成一种指针,它既可以指向当前位置,也可以指向结果集中的任意位置,它允许用户对指定位置的数据进行处理,可以把结果集中的数据放在数组、应用程序中或其它地方。Transact-SQL游标遵循ANSI-92标准。,3,10.1.2 使用游标的优点从游标定义可以得知游标具有如下的优点,正是这些优点使得游标在实际编程应用中具有重要作用。允许程序对由查询语句SELECT返回的行集合中的每一行数据执行相同或不同的操作,而不是对整个行集合执行同一个操作提供对基于游标位置的表中的行进行删除和更新的能力游标实际上作为面向集合的数据库管理系统(RDBMS)和面向行的程序设计之间的桥梁,使这两种处理方式通过游标沟通起来,本章首页,4,10.2 游标的使用,10.2.1 使用游标的步骤使用游标的工作流程如下图13-1所示。具体地说,有如下几个步骤:创建游标。使用T-SQL语句生成一个结果集,并且定义游标的特征,如游标中的记录是否可以修改。打开游标。从游标的结果集中读取数据。从游标中检索一行或多行数据称为取数据。对游标中的数据逐行操作。关闭和释放游标。,5,10.2.2 游标的定义及使用过程1.声明游标声明游标是指用DECLARE语句声明或创建一个游标。声明游标的语法如下:DECLARE cursor_name SCROLL CURSORFOR select_statementFOR READ ONLY|UPDATEOF column_name_list其中:cursor_name:是游标的名字,为一个合法的SQL Server标识符,游标的名字必须遵循SQL Server命名规范。SCROLL:表示取游标时可以使用关键字NEXT、PRIOR、FIRST、LAST、ABSOLUTE、RELATIVE。每个关键字的含义将在介绍FETCH子句时讲解。select_statement:是定义游标结果集的标准 SELECT语句,它可以是一个完整语法和语义的Transact-SQL的SELECT语句。,6,但是这个SELECT语句必须有FROM子句,不允许使用关键字 COMPUTE、COMPUTE BY、FOR BROWSE 和 INTO。FOR READ ONLY:指出该游标结果集只能读,不能修改。FOR UPDATE:指出该游标结果集可以被修改。OF column_name_list:列出可以被修改的列的名单。应该注意:游标有且只有两种方式:FOR READ ONLY或FOR UPDATE。当游标方式指定为FOR READ ONLY时,游标涉及的表不能被修改。当游标方式指定为FOR UPDATE时,可以删除或更新游标涉及的表中的行。通常,这也是缺省方式,即不指定游标方式时为FOR UPDATE方式。声明游标的DECLARE CURSOR 语句必须是在该游标的任何OPEN语句之前。,7,2.打开游标打开游标是指打开已被声明但尚未被打开的游标,打开游标使用OPEN语句。打开游标的语法如下:OPEN cursor_name其中:cursor_name是一个已声明的尚未打开的游标名。注意:当游标打开成功时,游标位置指向结果集的第一行之前。只能打开已经声明但尚未打开的游标。,8,3.从打开的游标中提取行游标被打开后,游标位置位于结果集的第一行前,此时可以从结果集中提取(FETCH)行。SQL Server将沿着游标结果集一行或多行向下移动游标位置,不断提取结果集中的数据,并修改和保存游标当前的位置,直到结果集中的行全部被提取。从打开的游标中提取行的语法如下:FETCH NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE FROM cursor_name INTO fetch_target_list其中:cursor_name:为一已声明并已打开的游标名字。NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE:游标移动方向,缺省情况下是NEXT,即向下移动。NEXT:取下一行数据。PRIOR:取前一行数据。FIRST:取第一行数据。,9,LAST:取最后一行数据。ABSOLUTE:按绝对位置取数据。RELATIVE:按相对位置取数据。游标位置确定了结果集中哪一行可以被提取,如果游标方式为FOR UPDATE的话,也就确定该位置一行数据可以被更新或删除。INTO fetch_target_list:指定存放被提取的列数据的目的变量清单。这个清单中变量的个数、数据类型、顺序必须与定义该游标的select_statement的SELECT_list中列出的列清单相匹配。为了更灵活地操纵数据,可以把从已声明并已打开的游标结果集中提取的列数据,分别存放在目的变量中。INTO fetch_target_list是T-SQL对ANSI-92 SQL标准的扩充。,10,有两个全局变量提供关于游标活动的信息:FETCH_STATUS 保存着最后FETCH语句执行后的状态信息,其值和含义如下:0:表示成功完成FETCH 语句。-1:表示FETCH语句执行有错误,或者当前游标位置已在结果集中的最后一行,结果集中不再有数据。-2:提取的行不存在。rowcount保存着自游标打开后的第一个FETCH语句,直到最近一次的FETCH语句为止,已从游标结果集中提取的行数。也就是说它保存着任何时间点客户机程序看到的已提取的总行数。一旦结果集中所有行都被提取,那么rowcount的值就是该结果集的总行数。每个打开的游标都与一特定的rowcount有关,关闭游标时,该rowcount变量也被删除。在FETCH语句执行后查看这个变量,可得知从游标结果集中已提取的行数。,11,4.关闭游标关闭(Close)游标是停止处理定义游标的那个查询。关闭游标并不改变它的定义,可以再次用open语句打开它,SQL Server会用该游标的定义重新创建这个游标的一个结果集。关闭游标的语法如下:CLOSE cursor_name其中:cursor_name:是已被打开并将要被关闭的游标名字。在如下情况下,SQL Server会自动地关闭已打开的游标:当你退出这个SQL Server会话时从声明游标的存储过程中返回时,12,5.释放游标释放(Deallocate)游标是指释放所有分配给此游标的资源,包括该游标的名字。释放游标的语法是:DEALLOCATE CURSOR cursor_name其中:cursor_name:将要被DEALLOCATE释放的游标名字。如果释放一个已打开但未被关闭的游标,SQL Server会自动先关闭这个游标,然后再释放它。注意一下关闭游标与释放游标的区别:关闭游标并不改变游标的定义,一个游标关闭后,不需要再次声明,就可以重新打开并使用它。但一个游标释放后,就释放了与该游标有关的一切资源,也包括游标的声明,游标释放后就不能再使用该游标了,如需再次使用游标,就必须重新定义。,13,【例10-1】定义一个游标,将职员表中所有的职员姓名、头衔显示出来。USE northwindGODECLARE emp_name VARCHAR(16),emp_title VARCHAR(16)-声明游标DECLARE emp_coursor SCROLL CURSOR FOR SELECT lastname,title FROM employees FOR READ ONLY-打开游标OPEN emp_coursor-读取数据FETCH FROM emp_coursor INTO emp_name,emp_title,14,WHILE FETCH_STATUS=0 BEGIN PRINT N职员姓名:+emp_name+N职 称:+emp_title-取下一条数据FETCH next FROM emp_coursor INTO emp_name,emp_title END-关闭游标CLOSE emp_coursor-释放游标DEALLOCATE emp_coursor,本章首页,15,10.3 使用游标修改数据,用户可以在UPDATE或DELETE语句中使用游标来更新、删除表或视图中的行,但不能用来插入新行。10.3.1 更新数据通过在UPDATE语句中使用游标可以更新表或视图中的行。被更新的行依赖于游标位置的当前值。更新数据语法形式如下:UPDATE table_name|view_name SET table_name.|view_name.column_name=new_value.n WHERE CURRENT OF cursor_name其中:紧跟UPDATE之后的table_name|view_name:要更新的表名或视图名,可以加或不加限定。但它必须是声明该游标的SELECT语句中的表名或视图名。,16,column_name:是要更新的列的列名,可以加或不加限定。但它们必须是声明游标的SELECT语句中UPDATE OF column_name_list的子集 new_value:为被更新列的新值,它可以是一个表达式、空值或子查询。WHERE CURRENT OF:使SQL Server只更新由指定游标的游标位置当前值确定的行。cursor_name:是已声明为FOR UPDATE方式并已打开的游标名。,17,注意:使用UPDATE.CURRENT OF语句一次只能更新当前游标位置确定的那一行,OPEN语句将游标位置定位在结果集第一行前,可以使用FETCH语句把游标位置定位在要被更新的数据行处。用UPDATE.WHERE CURRENT OF语句更新表中的行时,不会移动游标位置,被更新的行可以再次被修改,直到下一个FETCH语句的执行。UPDATE.WHERE CURRENT OF语句可以更新多表视图或被连接的多表,但只能更新其中一个表的行,即所有被更新的列都来自同一个表。,18,【例10-2】通过游标将职员表中记录号为3的的职称由“头衔”改为“Vice President,Sales”。USE northwindGO-声明游标,指定更新列DECLARE emp_coursor SCROLL CURSOR FOR SELECT lastname,title FROM employees FOR UPDATE OF title-打开游标OPEN emp_coursor-取第3行数据FETCH ABSOLUTE 3 FROM emp_coursor,19,-更新当前游标中的值UPDATE employeesSET title=Vice President,Sales WHERE CURRENT OF emp_coursor-取第三行数据FETCH ABSOLUTE 3 FROM emp_coursor-关闭并释放游标CLOSE emp_coursorDEALLOCATE emp_coursor,20,10.3.2 删除数据通过在DELETE语句中使用游标来删除表或视图中的行。被删除的行依赖于游标位置的当前值。删除数据语法形式如下:DELETE FROMdatabase.owner.table_name|view_nameWHERE CURRENT OF cursor_name其中:table_name|view_name:为要从其中删除行的表名或视图名,可以加或不加限定。但它必须是定义该游标的SELECT语句中的表名或视图名。cursor_name:为已声明并已打开的游标名。WHERE CURRENT OF:它使SQL Server只删除由指定游标的游标位置当前值确定的行。,21,注意:使用游标的DELETE语句,一次只能删除当前游标位置确定的那一行。OPEN语句将游标位置定位在结果集第一行之前,可以用FETCH语句把游标位置定位在要被删除的行处。在DELETE语句中使用的游标必须声明为FOR UPDATE方式。而且声明游标的SELECT语句中不能含有连接操作或涉及多表视图,否则即使声明中指明了FOR UPDATE方式,也不能删除其中的行。对使用游标删除行的表,要求有一个唯一索引。使用游标的DELETE语句,删除一行后将游标位置向前移动一行。,本章首页,游标示例Declare MyCusror Cursor Scroll For Select*From Master_Goods Order By GoodsID Open MyCursor Fetch next From MyCursor Delete From Master_Goods Where Current Of MyCursorClose MyCursor Deallocate MyCursor,22,23,10.4.1 触发器的概念,1、概念 触发器是一类特殊的存储过程,被定义为在对特定表或视图发出 UPDATE、INSERT 或 DELETE 语句时自动执行.2、触发器的特点:它与表紧密相连,可以看作表定义的一部分;它不能通过名称被直接调用,更不允许带参数,而是当用户对表中的数据进行编辑时,自动执行;它可以用于SQL Server约束、默认值和规则的完整性检查,实施更为复杂的数据完整性约束。,24,10.4.2 触发器的作用,1 在数据库中的相关表上实现级联更改在数据库的相关表上使用触发器可实现级联更新或删除2 强制比 CHECK 约束更复杂的数据完整性和 CHECK 约束不同,触发器可以引用其他表中的列通过下列方法使用触发器来强制复杂的引用完整性:根据情况确定是否级联更新与删除、创建多行触发器、在数据库间强制引用完整性,25,10.4.2 触发器的作用,3 维护非标准数据触发器可以用来在非标准数据库环境中维护底层的数据完整性。非标准数据常常是人为得出的或冗余的数据值4 比较数据修改前后的状态大部分触发器提供了引用被修改数据的能力,这样就允许用户在触发器中引用正被修改语句所影响的行,26,10.4.3 触发器的类型,1、DML触发器 DML触发器是当数据库服务器中发生数据操纵语言(DML)事件,如INSERT、UPDATE、DELETE时所触发的操作。DML触发器用于在数据被修改时强制执行业务规则。注意:SELECT语句不能触发触发器操作,因为SELECT语句并没有修改表中的数据。,27,10.3.3 触发器的类型,2、DDL触发器 SQL SERVER 2005中新增了DDL触发器,该触发器是一种特殊的触发器,当服务器或数据库中发生数据定义语句(DDL)事件,如CREATE、ALTER、DROP数据库对象等操作时将调用这些触发器。它们可以用于在数据库中执行管理任务,如审核以及规范数据库操作。,28,10.3.4 触发器应用的两个逻辑表,SQL SERVER 为每个触发器语句都创建两个特殊的逻辑表:INSERTED表和 DELETED表,由系统创建和维护。1、INSERTED表用于存放由INSERT或UPDATE语句而要向表中插入的所有数据行。在执行INSERT或UPDATE事务中,新的行同时会添加到触发触发器的表和INSERTED表中,INSERTED表中的内容是新插入到触发表的数据行的副本。,29,10.3.4 触发器应用的两个逻辑表,2、DELETED表用于存放由DELETE或UPDATE语句而要从表中删除的所有数据行。在执行DELETE或UPDATE事务中,被删除的行从触发触发器的表中被移动到DELETED表中,DELETED表中的内容是被删除的触发表的数据行的副本,注意:一个UPDATE事务可以看作是先执行一个DELETE操作,然后再执行一个INSERT操作,执行DELETE操作所删除的行首先被移动到DELETED表中,执行INSERT操作插入的新行会同时插入INSERTED表及触发表中,30,10.4 创建/管理DML触发器,10.4.1 创建DML触发器的语句 10.4.2 DML触发器的类型10.4.3 修改触发器 10.4.4 查看触发器10.4.5 删除触发器10.4.6 禁止和启用触发器,31,10.4.1 创建DML触发器的语句,SQL SERVER 2005中,创建一个触发器的基本语法如下:CREATE TRIGGER trigger_nameON table_name|view_name FOR|AFTER|INSTEAD OF INSERT,DELETE,UPDATEAS IF UPDATE(column_name)AND|OR UPDATE(column_name)Sql_statement,32,10.4.1 创建DML触发器的语句,参数说明:trigger_name:是要创建的触发器的名称。table_name|view_name:是在其上执行触发器的表名或视图名。FOR|AFTER|INSTEAD OF:指定触发器的时机,其中FOR与AFTER相同。INSERT,DELETE,UPDATE:是指定在表或视图上执行哪些数据修改语句时将触发触发器的关键字,必须至少指定一个选项。在触发器的定义中允许使用以任意顺序组合的这些关键字,中间用逗号分隔。IF UPDATE(column_name):指如果更新表的某列将进行的操作。Sql_statement:指定触发器执行的T-SQL语句。,33,10.4.1 创建DML触发器的语句,创建DML触发器前需注意以下事项:CREATE TRIGGER语句必须是批处理中的第一个语句,该语句后面的所有其它语句被解释为触发器语句定义的一部分。创建DML触发器的权限默认分配给表的所有者,且不能将该权限转给其它用户。DML触发器是数据库对象,其名称必须遵循标识符的命名规则。虽然DML触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建DML触发器。TRUNCATE TABLE语句不会触发DELETE触发器。,34,10.4.1 创建DML触发器的语句,创建DML触发器前需注意以下事项:在CREATE TRIGGER语句定义中不能包含以下语句:CREATE|ALTER|DROP DATABASE DISK INIT DISK RESIZE LOAD DATABASE LOAD LOG RESTORE DATABASE RESTORE LOG,35,10.4.2 DML触发器的类型,两种类型:AFTER触发器和 INSTEAD OF触发器。1)AFTER触发器 AFTER触发器又称为后触发器,该类触发器是在引起触发器执行的修改语句成功完成之后执行。2)INSTEAD OF触发器 INSTEAD OF触发器又称为替代触发器,当引起触发器执行的修改语句停止执行时,该类触发器代替触发操作执行。,36,1、创建 INSERT 触发器1)INSERT 触发器的工作过程在定义了 INSERT 触发器的表上执行 INSERT 语句INSERT 语句插入的行被记录下来触发器动作被执行2)inserted 表触发 INSERT 触发器时,新行被同时增加到触发器表和 inserted 表中inserted 表是保存了插入行的副本的逻辑表,它并不实际存在于数据库中inserted 表允许用户引用 INSERT 语句所插入的数据,这样触发器可以根据具体数据决定是否执行以及如何执行特定语句,创建DML触发器案例,37,创建DML触发器案例,例1:在northwind数据库中的order details表上创建一个触发器,使得无论何时向order details表中插入一条记录,都将更新product表中的unitsInstock列,即用原来的数量减去订购的数量。,38,创建DML触发器案例,在定义了 INSERT 触发器的表上执行 INSERT 语句,INSERT Order Details VALUES(10523,2,19.00,5,0.2),Order Details,OrderID,105221052310524,ProductID,2417,UnitPrice,31.009.6530.00,Quantity,7924,Discount,0.20.150.0,UPDATE P SET UnitsInStock=(P.UnitsInStock I.Quantity)FROM Products AS P INNER JOIN Inserted AS ION P.ProductID=I.ProductID,39,创建DML触发器案例,2、DELETE 触发器1)DELETE 触发器的工作过程在定义了 DELETE 触发器的表上执行 DELETE 语句DELETE 语句删除的行被记录下来触发器动作被执行,40,创建DML触发器案例,2)deleted 表:触发 DELETE 触发器时,被删除的行放入 deleted 表中deleted 表是保存了被删除行的副本的逻辑表deleted 表允许用户引用 DELETE 语句所删除的数据使用 DELETE 触发器当行添加到 deleted 表后,将不再存在于数据库表中从内存中分配空间创建 deleted 表。deleted 表总在缓存中DELETE 触发器不会被 TRUNCATE TABLE 语句触发,41,创建DML触发器案例,例2:在northwind数据库中的categories表上创建一个delete触发器,以保证当将某一个类别删除的同时将products表中对应categoryId的discontinued列的值设置为1,42,创建DML触发器案例,在定义了 DELETE 触发器的表上执行 DELETE 语句,DELETE CategoriesWHERE CategoryID=4,UPDATE P SET Discontinued=1FROM Products AS P INNER JOIN deleted AS dON P.CategoryID=d.CategoryID,Deleted,4,Dairy Products,Cheeses,0 x15,DELETE 语句删除的行被记录下来,43,创建DML触发器案例,例3:用触发器实现在PUBS数据库中的titleauthor表中一次只能从该表中删除一条记录。实现的T-SQL语句:Create TRIGGER tr_delete1ON titleauthor AFTER DELETEASDECLARE num intSELECT num=count(*)FROM DELETED,44,创建DML触发器案例,IF num=2 PRINT(不能删除两条以上记录)ROLLBACK TRANSACTIONGO-测试语句DELETE titleauthorWHERE au_ord=1GOSELECT*FROM titleauthorWHERE au_ord=1GO,45,创建DML触发器案例,3、UPDATE 触发器1)UPDATE 触发器的工作过程UPDATE 语句可以考虑为两个步骤:DELETE 步骤捕获数据的前像,INSERT 步骤捕获数据的后像当在定义了触发器的表上执行 UPDATE 语句的时候,原行(前像)被移到 deleted 表中,而更新的行(后像)则插入 inserted 表中触发器可以检索 deleted 和 inserted 表以及被更新的表,来确定是否更新了多行以及如何执行触发器动作,46,创建DML触发器案例,3、UPDATE 触发器2)监视对特定列的更新语法:IF UPDATE()允许触发器监测特定列,以对特定列的更新作出反应。例如发出不允许对列更新的错误信息,或者对新更新的列值进行处理,47,创建DML触发器案例,例4:禁止用户修改员工表中的employeeid 列的值。CREATE TRIGGER employee_updateON employees for updateASIF update(employeeid)BEGINrollback tran END,48,创建DML触发器案例,4、INSTEAD OF 触发器可以在表和视图上定义 INSTEAD OF 触发器。INSTEAD OF 触发器代替原触发动作执行,增加了视图上所能进行的更新的种类每个表上对每个触发动作(INSERT、UPDATE 或 DELETE)只能定义一个 INSTEAD OF 触发器不能在具有 WITH CHECK OPTION 选项的视图上创建INSTEAD OF 触发器,49,创建DML触发器案例,INSTEAD OF 触发器可使一般不支持更新的视图可以被更新截获对视图的操作,将其重导向底层表在 INSTEAD OF DELETE 触发器中,通过 deleted 表访问欲删除的行;在 INSTEAD OF UPDATE 或 INSTEAD OF INSERT 触发器中,通过 inserted 表访问新增加的行,50,创建DML触发器案例,例5:在学生成绩管理系统数据库的学生信息表上创建INSTEAD OF触发器,当删除学生信息表中的学号时,则级联删除成绩信息表中与之相关联的成绩信息。Create trigger trig_Delete on 学生信息INSTEAD OF DELETEASBEGIN delete 成绩信息 where 学生编号 in(select 学生编号 from deleted)delete 学生信息 where 学号 in(select 学号 from deleted)END,51,使用触发器的考虑事项,1)大部分触发器在动作后执行,约束和 INSTEAD OF 触发器是在动作前执行的。大部分触发器在所定义的表上执行 INSERT、UPDATE 或 DELETE 语句之后执行,而约束是在语句执行前检查的。2)约束最先被检查如果触发器表上存在约束,则它们在触发器执行之前被检查。如果违反了约束,则触发器不执行。3)表对同一动作可以有多个触发器SQL Server 2000 允许在单个表上多个触发器的嵌套。一个表上可以有多个触发器,每个触发器可以定义为单个动作或多个动作。,52,使用触发器的考虑事项,4)表的拥有者可以指定表上第一个和最后一个执行的触发器当表上有多个触发器时,表的拥有者可以使用系统存储过程 sp_settriggerorder 指定第一个和最后一个执行的触发器。5)必须具有执行触发器内所有语句的权限只有表的拥有者、sysadmin 固定服务器角色和 db_owner 与 db_ddladmin 固定数据库角色的成员能创建和删除对应表的触发器。权限不能被转让。6)表的拥有者不能在视图或临时表上创建 AFTER 触发器但触发器可以引用视图和临时表。,53,使用触发器的考虑事项,7)表的拥有者可以在表和视图上创建 INSTEAD OF 触发器INSTEAD OF 触发器极大地延伸了视图所能支持的更新类型。8)触发器不应该返回结果集触发器可以包含返回结果集的语句,但不建议这么做,因为当 UPDATE、INSERT 或 DELETE 语句执行的时候,用户或开发者往往并不需要什么结果集。,54,10.4.3 修改触发器,修改现有的触发器的定义可以使用ALTER TRIGGER语句,其语法格式为:ALTER TRIGGER trigger_nameON table_name|view_name FOR|AFTER|INSTEAD OF INSERT,DELETE,UPDATEAS IF UPDATE(column_name)AND|OR UPDATE(column_name)Sql_statement,55,10.4.4 查看触发器,1.使用系统存储过程查看触发器信息 1)使用sp_help查看触发器的一般信息 2)使用sp_helptext查看未加密的触发器的定义信息 3)使用sp_depends查看触发器的依赖关系 4)专门用于查看表的触发器信息的系统存储过程sp_helptrigger,其语法格式如下:sp_helptrigger 表名,56,10.4.4 查看触发器信息,例6:使用系统存储过程sp_helptrigger查看产品表上存在的触发器的信息。其程序清单如下。USE northwind GO EXEC sp_helptrigger products GO,57,10.4.5 删除触发器,使用DROP TRIGGER语句可以删除当前数据库中的一个或多个触发器,如果删除多个触发器,各触发器名之间用逗号分隔。其语法格式为:DROP TRIGGER trigger_name,trigger_name,58,10.4.6 禁止和启用触发器,其语法格式为:ALTER TABLE 表名 ENABLE|DISABLE trigger 触发器名称 其中:ENABLE:该选项为启用触发器 DISABLE:该选项为禁用触发器,59,10.5 创建DDL触发器,DDL触发器为响应Create、Alter和Drop语句而激活:DDL触发器语法CREATETRIGGERONALLSERVER|DATABASE WITH,.n FOR|AFTERevent_type|event_group,.n ASsql_statement;.n|EXTERNALNAME;,60,10.5 创建DDL触发器,例:创建一个作用在学生成绩管理系统数据库的DDL触发器Create trigger trig_学生成绩管理系统On database for drop_table,alter_tableAs Begin print 不能删除或修改当前数据库的表 rollback transactionEND测试触发器:Alter table 学生信息 alter column 姓名 nvarchar(20)null,61,10.5 创建DDL触发器,例:创建一个作用在服务器作用域的DDL触发器Create trigger trig_server1On ALL SERVER for create_database,alter_databaseAs Begin print 不能创建或修改当前服务器中的数据库 rollback transactionEND测试触发器:Create database 学生基本信息,

    注意事项

    本文(《游标和触发器》PPT课件.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开