SQL语言——SQL高级应用(2)分析_第1页
SQL语言——SQL高级应用(2)分析_第2页
SQL语言——SQL高级应用(2)分析_第3页
SQL语言——SQL高级应用(2)分析_第4页
SQL语言——SQL高级应用(2)分析_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SQLSQL高级应用高级应用 本章首先介绍本章首先介绍Transact-SQLTransact-SQL程序设计基础:标识符、程序设计基础:标识符、数据类型、各类运算符、变量、批处理、流程控制语句、数据类型、各类运算符、变量、批处理、流程控制语句、函数等,然后介绍存储过程、游标、触发器的使用。函数等,然后介绍存储过程、游标、触发器的使用。SQL高级应用n1 1 T-SQLT-SQL程序设计基础程序设计基础n2 2 存储过程存储过程n3 3 游标游标n4 4 触发器触发器2 2 存储过程存储过程 n存储过程存储过程是存储于数据库中的一组是存储于数据库中的一组T-SQLT-SQL语句。语句。n可将常

2、用的或很复杂的工作,预先用可将常用的或很复杂的工作,预先用SQLSQL语句写好并用语句写好并用一个指定的名称存储起来,那么以后要叫数据库提供与一个指定的名称存储起来,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用已定义好的存储过程的功能相同的服务时,只需调用executeexecute,即可自动完成命令。即可自动完成命令。 n存储过程存储过程是一种数据库对象,可以包含程序流、逻辑是一种数据库对象,可以包含程序流、逻辑控制以及对数据库的查询,可以接受参数、输出参数、控制以及对数据库的查询,可以接受参数、输出参数、返回单个或多个结果集以及状态集,并可重用或嵌套。返回单个或多

3、个结果集以及状态集,并可重用或嵌套。 存储过程的优点n代码执行效率高n模块化编程 n数据查询效率高 n安全性高 n减少网络流量 存储过程的分类n系统存储过程n用户自定义的存储过程。 系统存储过程n系统存储过程系统存储过程是由SQL Serve系统创建的存储过程,用户可直接使用。n系统存储过程存储在master数据库中,以“sp_”开头命名。系统存储过程主要用于系统管理、用户登录管理、权限设置、数据库对象管理、数据复制等操作。 常用的系统存储过程 nsp_help:报告有关数据库对象(sysobjects 表中列出的任何对象)、用户定义数据类型或系统所提供的数据类型的信息。nsp_addlogi

4、n:创建新的 SQL Server 登录,该登录允许用户使用 SQL Server 身份验证连接到 SQL Server 实例。nSp_password:为 Microsoft SQL Server 登录名添加或更改密码。nsp_cursor_list:报告当前为连接打开的服务器游标的属性。nSp_adduser:向当前数据库中添加新的用户。nsp_addrole:在当前数据库中创建新的数据库角色。nsp_addrolemember:为当前数据库中的数据库角色添加数据库用户、数据库角色、Windows 登录或 Windows 组。常用的系统存储过程(续)nsp_droplogin:删除 SQL

5、 Server 登录名。这样将阻止使用该登录名对 SQL Server 实例进行访问。nsp_dropuser:从当前数据库中删除数据库用户。nsp_droprole:从当前数据库中删除数据库角色。nsp_droprolemember:从当前数据库的 SQL Server 角色中删除安全帐户。nsp_addtype:创建别名数据类型。 例25 使用存储过程sp_help查看bank数据库的信息。use studentgoexec sp_help go用户自定义存储过程n数据库用户可根据某一特定功能的需要,在用户数据库中由用户创建的存储过程n存储过程命名时不能不能以“sp_”开头。2.2 2.2

6、 存储过程的创建存储过程的创建 CREATE PROCEDURE procedure_name ; number parameter data_type VARYING =default OUTPUT , WITH RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION AS sql_statement语法说明 nprocedure_name:新创建的存储过程名称,过程名必须符合标识符规则,且对于数据库及其所有者必须唯一。n;number:是可选的整数,用来对同名的过程分组,以便用一条DROP PROCEDURE语句即可将同组的过程一起除去。nparam

7、eter:过程中的参数。在CREATE PROCEDURE语句中可以声明一个或多个参数。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值,或者该值设置为等于另一个参数)。使用 符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。存储过程最多可有2100个参数。ndata_type:参数的数据类型。除table之外的其他所有数据类型均可以用作存储过程的参数。但是,cursor数据类型只能用于OUTPUT参数。如果指定cursor数据类型,则还必须指定VARYING和OUTPUT关键字。对于可以是cursor数据类型的输出参数,没有最大数目的限制。语法说明(续)nV

8、ARYING:指定作为输出参数支持的结果集,仅适用于游标参数。ndefault:参数的默认值。如果定义了默认值,则不必指定该参数的值即可执行过程。默认值必须是常量或NULL。nOUTPUT:表明参数是返回参数,可将信息返回给调用过程。n RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION :RECOMPILE表明SQL Server不会缓存该过程的被引用的对象,该过程将在运行时重新编译。ENCRYPTION表示SQL Server加密syscomments表中包含CREATE PROCEDURE语句文本的条目。nAS:指定过程要执行的操作。nsql_

9、statement:过程中要包含的任意数目和类型的Transact-SQL语句。但有一些限制。 2.3 2.3 存储过程的执行存储过程的执行 n存储过程一般不会自动执行,用户可使用存储过程一般不会自动执行,用户可使用EXECUTEEXECUTE命命令来直接执行存储过程。令来直接执行存储过程。 n执行存储过程必须具有执行该存储过程的权限。执行存储过程必须具有执行该存储过程的权限。n如果存储过程是批处理中的第一个语句,如果存储过程是批处理中的第一个语句,EXECUTE可以省略。可以省略。 存储过程的执行 EXECUTE return_status= procedure_name ; number

10、| procedure_name_var parameter = value | variable OUTPUT | DEFAULT , WITH RECOMPILE 语法说明n只能在当前数据库中创建存储过程。nreturn_status=:是一个可选的整形变量,用来保存存储过程的返回状态。该变量在用于EXECUTE语句之前必须在批处理、存储过程或函数中声明。nprocedure_name:要调用的存储过程名称。n;number:可选的整数,具体含义同CREATE PROCEDURE中的;number。nprocedure_name_var:是局部定义变量名,代表存储过程名称。nparamet

11、er,value:是过程参数及其值。 语法说明(续)nvariable:用来保存参数或返回参数的变量。nOUTPUT:指定存储过程必须返回一个参数。nDEFAULT:根据过程的定义,提供参数的默认值。nWITH RECOMPILE:可强制重新编译存储过程代码,但消耗较多的系统资源。2.4 2.4 存储过程的查看和修改存储过程的查看和修改n存储过程的有关信息以及创建存储的文本均被存储在SQL Server数据库中的系统表sysobjects和和syscomments中,通过SELECT语句可直接查看存储过程的定义。 存储过程的查看select sysobjects.id,syscomments.

12、textfrom sysobjects,syscommentswhere sysobjects.id=syscomments.id andsysobjects.type=P and =procedure_namen其中其中,procedure_name为要查看的存储过程的名称。ALTER PROCEDURE procedure_name ;number parameter data_type VARYING =default OUTPUT , WITH RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION AS sql_s

13、tatementn其中其中的参数和保留字的含义说明与CREATE PROCEDURE语句一致。存储过程的修改存储过程的删除DROP PROCEDURE procedure_name,n语法说明语法说明:nprocedure_name:为要删除的存储过程或存储过程组的名称。n存储过程分组后,将无法删除组内的单个存储过程。删除一个存储过程将会把同组的所有存储过程都删除。例例1 1 创建一个不带参数的存储过程创建一个不带参数的存储过程P1P1,用于检,用于检索所有学生信息,并执行该存储过程。索所有学生信息,并执行该存储过程。-创建存储过程创建存储过程P1use studentgocreate pro

14、cedure p1as select * from studentgo-执行存储过程执行存储过程p1execute p1 例27 创建带有一个输入参数的存储过程P2,用于检索没有参加考试某门课程考试的同学。-创建存储过程创建存储过程P2CREATE PROCEDURE P2 kcms varchar(20)ASBEGIN select * from student where sno NOT IN (select sno from score where cno IN (select cno from course where cname=kcms) END-执行存储过程执行存储过程p2exe

15、cute p2 数据结构例28 创建带有一个输入参数和一个输出参数的存储过程P3,输入学生的学号,返回姓名。-创建存储过程创建存储过程P3CREATE PROCEDURE P3 xh char(10), xm char(10) OUTPUTASBEGIN select xm=sname from student where sno = xh END-执行存储过程执行存储过程p3declare xm varchar(10)execute p1 101 xm OUTPUTprint xm 例29 创建带有多个输入参数和多个输出参数的存储过程P4,输入学生的学号和课程号,返回姓名和成绩。-创建存储过

16、程创建存储过程P4CREATE PROCEDURE P4 xh char(10), kch char(10),xm char(10) OUTPUT, cj int OUTPUTASBEGIN select xm=sname from student where sno = xh select cj = grade from score where sno=xh and cno=kchEND-执行存储过程执行存储过程p4declare xm varchar(10),cj intexecute p1 101,201 ,xm OUTPUT, cj OUTPUTprint xm Print cj例29

17、 删除例26、27、28创建的存储过程p1、p2、p3。use studentdrop procedure p1,p2,p3,p4练习(1) 创建存储过程,给定老师姓名,删除学习该老师的选课创建存储过程,给定老师姓名,删除学习该老师的选课记录。存储过程的参数为老师姓名,返回删除记录的个记录。存储过程的参数为老师姓名,返回删除记录的个数。数。(2)创建存储过程,给定老师姓名,把创建存储过程,给定老师姓名,把score表中该老师授表中该老师授课成绩低于课成绩低于60分的改为分的改为0分。返回修改记录的个数。分。返回修改记录的个数。(3)创建存储过程,给定学号、课程号和成绩,如果在创建存储过程,给定

18、学号、课程号和成绩,如果在score表中有该选课记录,更新该选课的成绩,如果没有表中有该选课记录,更新该选课的成绩,如果没有,则在,则在score表中插入一条新记录。数据更新成功,返回表中插入一条新记录。数据更新成功,返回1,数据更新失败,返回,数据更新失败,返回-1。3 3 游标游标 nSQLSQL语言与主语言在数据处理方式上不同,语言与主语言在数据处理方式上不同,SQLSQL语言语言是是面向集合面向集合的,一条的,一条SQLSQL语句可以产生或处理多条记录;语句可以产生或处理多条记录;而主语言是面向而主语言是面向单一记录单一记录的,一次只能处理一条记录。的,一次只能处理一条记录。n可借助于

19、可借助于游标游标来进行面向单条记录的数据处理,来来进行面向单条记录的数据处理,来协调这两种不同的数据处理方式。协调这两种不同的数据处理方式。 3.1 3.1 游标概述游标概述游标是一种游标是一种数据结构,包括数据结构,包括:n游标结果集游标结果集:由定义该游标的SELECT语句返回的行的集合。n游标位置游标位置:指向这个集合中某一行的指针。游标可以逐行处理数据,具有以下优点n通过游标允许程序对由SELECT产生的结果集的每一行执行相同或不同的操作。n允许定位在结果集的特定行。n允许结果集中的当前行被修改。n允许由其他用户修改的数据在结果集中是可见的。n提供脚本、存储过程和触发器中使用的访问结果

20、集中的数据的T-SQL语句。SQL SERVER SQL SERVER 支持三种类型的游标支持三种类型的游标nTransact_SQLTransact_SQL游标游标:由:由DECLARE CURSORDECLARE CURSOR语法定义,主要用语法定义,主要用在在Transact_SQLTransact_SQL脚本、存储过程和触发器中。脚本、存储过程和触发器中。Transact_SQLTransact_SQL游标主要用在服务器上,由从客户端发送给游标主要用在服务器上,由从客户端发送给服务器的服务器的Transact_SQLTransact_SQL语句或是批处理、存储过程、触发语句或是批处理、

21、存储过程、触发器中的器中的Transact_SQLTransact_SQL进行管理。进行管理。nAPIAPI游标游标:支持在:支持在OLE DBOLE DB,ODBCODBC以及以及DB_libraryDB_library中使用游中使用游标函数,主要用在服务器上。标函数,主要用在服务器上。n客户游标客户游标:主要是当在客户机上缓存结果集时才使用。在:主要是当在客户机上缓存结果集时才使用。在客户游标中,有一个缺省的结果集被用来在客户机上缓存客户游标中,有一个缺省的结果集被用来在客户机上缓存整个结果集。客户游标仅支持静态游标而非动态游标。客整个结果集。客户游标仅支持静态游标而非动态游标。客户游标常

22、常仅被用作服务器游标的辅助。户游标常常仅被用作服务器游标的辅助。 使用游标的步骤使用游标的步骤 n定义游标n打开游标n从游标中获取记录n关闭游标n释放游标3.2 3.2 声明游标声明游标 DECLARE CURSOR FOR FOR READ ONLY | UPDATE OF column_name ,n语法说明语法说明ncursor_namecursor_name: :是所定义的游标名称。是所定义的游标名称。nselect_statementselect_statement:是定义游标结果集的标准是定义游标结果集的标准SELECTSELECT语句语句,既可以是简单查询,也可以是复杂的连接查询

23、或嵌套查,既可以是简单查询,也可以是复杂的连接查询或嵌套查询。询。nFOR READ ONLYFOR READ ONLY:指出游标的结果集是只读的,不能修改。指出游标的结果集是只读的,不能修改。nFOR UPDATE OF column_name ,n:FOR UPDATE OF column_name ,n:指出游标的结果指出游标的结果集是可以被修改的。如果指定集是可以被修改的。如果指定OF column_name ,nOF column_name ,n参参数,则只允许修改所列出的列。如果在数,则只允许修改所列出的列。如果在UPDATEUPDATE中未指定列中未指定列的列表,则可以更新所有列

24、。的列表,则可以更新所有列。n定义游标仅仅是一条说明性语句,这时定义游标仅仅是一条说明性语句,这时DBMSDBMS并不执行并不执行SELECTSELECT语句。语句。 3.3 3.3 打开游标打开游标 OPEN OPEN n语法说明语法说明:n打开游标实际上是执行相应的打开游标实际上是执行相应的SELECTSELECT语句,并把指语句,并把指定表中的所有满足查询条件的记录放到内存缓冲区定表中的所有满足查询条件的记录放到内存缓冲区中,可从全局变量中,可从全局变量CURSOR_ROWSCURSOR_ROWS中读取游标结果中读取游标结果集合中的行数。集合中的行数。n执行了执行了“打开游标打开游标”后

25、,游标处于活动状态,指针后,游标处于活动状态,指针指向查询结果集的第一条记录。指向查询结果集的第一条记录。 3.4 3.4 提取游标中的记录提取游标中的记录 FETCH NEXT |PRIOR |FIRST |LAST FETCH NEXT |PRIOR |FIRST |LAST Cursor_name INTO Cursor_name INTO variable_namevariable_name,n ,n n语法说明语法说明:nNEXTNEXT:向下移动。如果向下移动。如果FETCH NEXTFETCH NEXT为对游标的第为对游标的第一次提取操作,则返回结果集中的第一行。一次提取操作,则

26、返回结果集中的第一行。NEXTNEXT为默认的游标提取选项。为默认的游标提取选项。nPRIORPRIOR:向前移动。如果向前移动。如果FETCH PRIORFETCH PRIOR为对游标的为对游标的第一次提取操作,则没有行返回并且游标置于第第一次提取操作,则没有行返回并且游标置于第一行之前。一行之前。nFIRSTFIRST:提取游标中的第一行并将其作为当前行。提取游标中的第一行并将其作为当前行。 语法说明(续)语法说明(续)nLASTLAST:提取游标中的最后一行并将其作为当前行。提取游标中的最后一行并将其作为当前行。nINTO variable_name,n INTO variable_na

27、me,n :将提取到的数据将提取到的数据放到局部变量中。列表中的局部变量的个数及数据放到局部变量中。列表中的局部变量的个数及数据类型应与定义游标时的类型应与定义游标时的SELECTSELECT语句目标列一致。语句目标列一致。nFETCHFETCH语句每次只能提取一行数据。因此语句每次只能提取一行数据。因此FETCHFETCH语句语句通常用在一个循环结构中,通过循环执行通常用在一个循环结构中,通过循环执行FETCHFETCH语语句逐条取出结果集中的记录进行处理。句逐条取出结果集中的记录进行处理。nF E T C HF E T C H 语 句 的 执 行 状 态 保 存 在 全 局 变 量语 句

28、的 执 行 状 态 保 存 在 全 局 变 量FETCH_STATUSFETCH_STATUS中,有三种取值:中,有三种取值:0 0表示成功;表示成功;1 1表示失败或此行不再结果集中;表示失败或此行不再结果集中;2 2表示被提取的表示被提取的行不存在。行不存在。 3.5 3.5 关闭游标关闭游标 CLOSE CLOSE cursor_namecursor_namen语法说明语法说明:n在游标使用结束后,应关闭游标,以释放游标在游标使用结束后,应关闭游标,以释放游标占用的缓冲区及其他资源。占用的缓冲区及其他资源。 3.6 3.6 释放游标释放游标 n由于关闭游标时并没有删除游标,因此游标仍然占

29、用由于关闭游标时并没有删除游标,因此游标仍然占用系统资源。系统资源。n可使用可使用DEALLOCATEDEALLOCATE语句来释放游标所占用的系统资源语句来释放游标所占用的系统资源,其基本格式如下:,其基本格式如下: DEALLOCATE DEALLOCATE cursor_namecursor_name n语法说明语法说明:ncursor_namecursor_name :为要释放的游标名称。:为要释放的游标名称。例例30 30 定义一个查询的游标,将定义一个查询的游标,将scorescore中不及格学中不及格学生的姓名、课程名和成绩查询出来。生的姓名、课程名和成绩查询出来。-声明变量de

30、clare xm varchar(20), kcmc varchar(20), cj int-创建游标DECLARE Retrive_grade CURSOR FOR select sname,cname,grade from student,course,score where student.sno=score.sno and o=o and grade60-打开游标OPEN Retrive_grade-提取第一行数据FETCH NEXT FROM Retrive_grade INTO xm, kcmc, cj-打印表标题PRINT 姓名姓名 课程名称课程名称 成绩成绩PRINT -whi

31、le FETCH_STATUS=0BEGIN -打印当前行 PRINT xm + kcmc+ CONVERT(varchar(5),cj) -提取下一行数据 FETCH NEXT FROM Retrive_grade INTO xm, kcmc, cjEND-关闭游标CLOSE Retrive_grade-释放游标DEALLOCATE Retrive_grade练习n定义一个游标,查询打印定义一个游标,查询打印scorescore中不及格学中不及格学生的姓名、课程名和成绩和绩点。生的姓名、课程名和成绩和绩点。 说明:绩点的计算调用函数:说明:绩点的计算调用函数:js_jd(姓名,课程名称) 打

32、印格式:姓名 课程名称 成绩 绩点-通过游标修改数据,UPDATE语句的语法形式 UPDATE table_nameWHERE CURRENT OF cursor_namen其中其中:ntable_name:为需要修改的数据库表名。ncursor_name:为游标名。n当游标基于多个表时,UPDATE语句只能修改一个基本表中的数据,其他表中的数据不受影响。例31 定义一个游标,把绩点低于2.0的课程的成绩加10分,并保存到score表中。declare xm varchar(20), kcmc varchar(20), cj int, jd decimal(5,1)-定义游标DECLARE U

33、pdate_grade CURSOR FOR select sname,cname,grade from student,course,score where student.sno=score.sno and o=o FOR UPDATE OF grade-打开游标OPEN Update_grade-提取第一行数据FETCH NEXT FROM Update_grade INTO xm,kcmc, cjselect jd = dbo.js_jd(xm,kcmc) 计算绩点计算绩点-提取数据while FETCH_STATUS=0BEGIN -处理绩点低于处理绩点低于2.0 IF jd 2.0

34、 UPDATE score SET grade=grade+10 WHERE CURRENT OF Update_grade FETCH NEXT FROM Update_grade INTO xm,kcmc, cj select jd = dbo.js_jd(xm,kcmc)END-关闭游标CLOSE Update_grade-释放游标DEALLOCATE Update_grade通过游标删除数据,DELETE语句的语法形式 DELETE FROM table_nameWHERE CURRENT OF cursor_namen其中其中:ntable_name:为需要修改的数据库表名。ncur

35、sor_name:为游标名。n当游标基于多个数据表时,DELETE语句一次只能删除一个基本表中的数据,其他基本表中的数据不受影响。例32 定义游标,将score表中绩点为0的信息删除。declare xm varchar(20), kcmc varchar(20), cj int, jd decimal(5,1)-定义游标DECLARE Delete_grade CURSOR FOR select sname,cname,grade from student,course,score where student.sno=score.sno and o=o FOR UPDATE-打开游标OPEN

36、 Delete_grade-提取第一行数据FETCH NEXT FROM Delete_grade INTO xm,kcmc, cjselect jd = dbo.js_jd(xm,kcmc) 计算绩点计算绩点-提取数据while FETCH_STATUS=0BEGIN -删除绩点为删除绩点为0的记录的记录 IF jd = 0 DELETE FROM score WHERE CURRENT OF Delete_grade FETCH NEXT FROM Delete_grade INTO xm,kcmc, cj select jd = dbo.js_jd(xm,kcmc)END-关闭游标CLO

37、SE Delete_grade-释放游标DEALLOCATE Delete_grade练习u创建一个存储过程创建一个存储过程P8P8,查询打印给定学生姓名的选课,查询打印给定学生姓名的选课信息信息, ,并计算其平均绩点。并计算其平均绩点。 说明:绩点的计算调用函数:说明:绩点的计算调用函数:js_jd(js_jd(姓名姓名, ,课程名称课程名称) ) 打印格式:打印格式: X X X X X X同学的成绩表同学的成绩表 课程名称 成绩 绩点- XXX XX X.X- 平均绩点: X.X4 触发器 n触发器触发器是一种在使用UPDATE、INSERT或DELETE命令对指定表中的数据进行修改时,

38、由数据库管理系统自动执行的内嵌程序,用来保证数据的一致性和完整性。n触发器与表紧密相连触发器与表紧密相连,可以看作是表定义的一部分。触发器可以建立在一个用户定义的表或视图上,但不能不能建立在临时表或系统表上。 n触发器基于一个表创建触发器基于一个表创建,但可以操作多个表。n触发器作为一个独立的单元被执行触发器作为一个独立的单元被执行,被看作一个事务。如果在执行触发器的过程中发生了错误,则整个事务将会自动回滚。n触发器是一种特殊的存储过程触发器是一种特殊的存储过程,但它与存储过程不同,存储过程的存在独立于表,而触发器和表紧密结合;存储过程可以通过存储过程名称而被直接调用,触发器则是通过事件进行触

39、发而自动被执行的。 触发器的优点触发器的优点n触发器是触发器是自动执行自动执行的。的。n触发器可以通过数据库中的相关表触发器可以通过数据库中的相关表进行层叠更改进行层叠更改,实,实现多个表之间数据的一致性和完整性。现多个表之间数据的一致性和完整性。n触发器可以强制比用触发器可以强制比用check约束定义的约束约束定义的约束更为复杂更为复杂的约束的约束。触发器可以引用其他表中的列。触发器可以引用其他表中的列。n一个表中的一个表中的多个同类触发器多个同类触发器(INSERT、UPDATE、DELETE)运行采取多个不同的对策,以相应同一个修)运行采取多个不同的对策,以相应同一个修改语句。改语句。n

40、触发器可以触发器可以评估数据修改前后的表状态评估数据修改前后的表状态,并根据其差,并根据其差异采取对策。异采取对策。SQL Server触发器的分类触发器的分类nAFTER触发器触发器:又称后触发器。这种触发器在数据变动完:又称后触发器。这种触发器在数据变动完成后才被触发。可以对变动的数据进行检查,如果发现错成后才被触发。可以对变动的数据进行检查,如果发现错误,将拒绝接受或回滚变动的数据。只能在表上定义。在误,将拒绝接受或回滚变动的数据。只能在表上定义。在同一个数据表中可以创建多个同一个数据表中可以创建多个after触发器。默认为触发器。默认为after触发器。触发器。for同同after。n

41、INSTEAD OF触发器触发器:前触发器。其在数据变动前被触发:前触发器。其在数据变动前被触发,并取代变动数据的操作(,并取代变动数据的操作( update、insert、delete ),而去执行触发器定义的操作。可在表或视图上定义,每,而去执行触发器定义的操作。可在表或视图上定义,每个个update、insert、delete语句最多可定义一个语句最多可定义一个instead of触发器。触发器。触发器的组成 n事件:事件:事件是指对数据库的插入、删除、修改等操作。触发器在这些事件发生时将开始工作。n条件:条件:触发器将测试条件是否成立。如果条件成立,就执行相应的动作;否则什么也不做。n

42、动作:动作:如果条件满足,则执行这些动作。 Inserted表和表和deleted表表n在结构上在结构上类似于类似于定义触发器的表。由系统自动创建和管理定义触发器的表。由系统自动创建和管理。n可使用这两个临时驻留内存的表测试某些数据修改的效果可使用这两个临时驻留内存的表测试某些数据修改的效果以及设置触发器操作的条件;但是以及设置触发器操作的条件;但是不能不能直接对表中的数据直接对表中的数据进行更改。进行更改。nDeleted表表用于存储用于存储delete和和update语句所影响的行的备语句所影响的行的备份。在执行份。在执行delete或或update语句时,行从表中删除,并转语句时,行从表

43、中删除,并转移到移到deleted表中。表中。Deleted表和基表通常没有相同的行。表和基表通常没有相同的行。nInserted表表用于存储用于存储insert和和update语句所影响的行的备语句所影响的行的备份。在一个插入或更新事务处理中,新建行被同时添加到份。在一个插入或更新事务处理中,新建行被同时添加到inserted表和基表中。表和基表中。Inserted表中的行是基表中新行的表中的行是基表中新行的备份。备份。在对具有触发器的表(触发器表)进行操作时,在对具有触发器的表(触发器表)进行操作时,其操作过程如下:其操作过程如下:n执行执行insert操作操作:插入到触发器表中的新行被插

44、入到:插入到触发器表中的新行被插入到inserted表中。表中。n执行执行delete操作操作:从触发器表中删除的行被插入到:从触发器表中删除的行被插入到deleted表中。表中。n执行执行update操作操作:先从触发器表中删除旧行,然后再插:先从触发器表中删除旧行,然后再插入新行。其中被删除的旧行被插入到入新行。其中被删除的旧行被插入到deleted表中,插入表中,插入的新行被插入到的新行被插入到inserted表中。表中。创建触发器创建触发器CREATE TRIGGER ON WITH ENCRYPTION WITH ENCRYPTION FOR | | AFTER | | INSTEA

45、D OF DELETE DELETE , , INSERTINSERT , , UPDATEUPDATE ASAS sql_statementsql_statement . .n n 语法说明:语法说明:nTrigger_name:触发器的名称。:触发器的名称。nTable|view:是在其上执行触发器的表或视图。:是在其上执行触发器的表或视图。nWith encryption:加密:加密syscomments表中包含表中包含create trigger语句语句文本的条目。文本的条目。nAfter:指定触发器只有在触发:指定触发器只有在触发sql语句中指定的所有操作都已成功执行语句中指定的所有操作都已成功执行后才激发。如果仅指定后才激发。如果仅指定for,则是默认设置。不能在视图上定义,则是默认设置。不能在视图上定义after触触发器。发器。nInstead of:指定执行触发器而不是执行触发:指定执行触发器而不是执行触发sql语句,从而替代触发语句,从而替代触发语句的操作。在表或视图上,每个语句的操作。在表或视图上,每个insert、update、delete语句最多语句最多可以定义可以定义 一个一个instead of触发器。触发器。nDelete、update、insert:是指定在表或视图上执行哪些数据修改语:是指定在表或视图上执行哪些数据修改语句时将激活

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论