SQLSERVER2000使用手册(12页).doc
-SQLSERVER2000使用手册-第 11 页Microsoft SQL SERVER 2000使用手册在网络环境下进行数据库系统的应用开发,需要选择具体的DBMS。本章首先介绍当前流行的关系数据库系统Microsoft SQL Server的基本知识,接着以Microsoft SQL Server 2000为背景,介绍数据库系统设计的方法和SQL Server的高级应用技术。1 SQL Server简介Microsoft SQL Server是高性能、客户/服务器的关系型数据库管理系统RDBMS,能够支持大吞吐量的事务处理,也能在Microsoft Windows 2000 Server网络环境下管理数据的存取以及开发决策支持应用程序。由于Micriosoft SQL Server是开放式的系统,其他系统可以与它进行完好的交互操作。1.1 SQL Server 2000的特点(1)对操作系统的要求低SQL Server 2000除了继续支持Windows 2000 Server外,还新增了SQL Server 2000桌面版(Desktop Edition),此版本可以安装在Windows 95/98/2000专业版上,用来建立数据库,这使得SQL Server 2000变得非常通用,可以在任何大小的计算机上运行,包括膝上机、台式机和高档服务器。(2)管理自动化许多关键性的工作、数据库调整和最佳化处理等都由系统自动完成,减少了人为手工调整。例如,系统会动态调整内存需求,自动缩减库和增加数据库所占文件的空间大小,自动更新统计数据等等。(3)新的Enterprise Manager它以MMC(Microsoft Management Console)为基础加以设计,其界面和其他微软服务器产品一致,看上去很像Windows的资源管理器。(4)简化了SQL Server 2000数据库与Windows文件系统之间的关系,具有更好的可伸缩性在SQL Server 2000中,数据库驻留在操作系统文件上,而不再位于SQL Server的逻辑设备中,取消了以前必须先建立设备(Device),再在设备上建立数据库的观念,现在仅使用CREATE DATABASE 语句即可创建数据库及其所有文件,从而简化了数据库设计和管理的工作。SQL Server 2000允许数据库自动扩展,不再需要管理员发出额外的ALTER语句命令。(6)提供数据库挖掘功能在SQL Server 2000中加入的OLAP(On-Line Analytical Processing)服务,可以帮助公司建立决策分析的应用。1.2SQL Server 2000环境介绍1)系统目录用途介绍若使用默认值,安装程序会把大部分SQL Server 2000系统文件存放在启动盘的MSSQL目录下,并且在此目录下将创建多个子目录,用于存放不同的目的文件,列举如下:BACKUP 存放备份文件Binn 存放客户端和服务器端可执行文件与DLL文件Data 存放数据库文件,包括系统数据库、实例数据库和用户数据库FTDATA 存放全文索引目录文件Install 存放有关安装方面的信息文件JOBS 存放工作文件LOG 存放日志文件REPLDATA 存放复制数据Upgrade 存放升级工具及 SQL Server 7升级到 2000时产生的文件2)自动创建的数据库在安装SQL Server 2000时,安装程序会自动创建4个系统数据库(master、model、msdb、tempdb)和两个范例数据库(Northwind、pubs),系统数据库由系统自动维护。(1)master数据库其中记录了所有SQL Server 2000的系统信息、登录账号、系统配置设置、系统中所有数据库及其系统信息以及存贮介质信息等。master数据库的数据文件为master.mdf,日志文件为mastlog.ldf。(2)model数据库此系统数据库是SQL Server 2000为用户创建数据库提供的模板数据库,每个新建的数据库都是在一个model数据库的副本上扩展而生成的,所以对model数据库的修改一定要小心。model数据库的数据文件为model.mdf,日志文件为modellog.ldf。(3)msbd数据库msdb数据库主要用于SQL Server 2000存储任务计划信息、事件处理信息、备份恢复信息以及异常报告等。msdb数据库的数据文件为msdbf,日志文件为msdblog.ldf。(4)tempdb数据库tempdb数据库存放所有临时表和临时的存储程序,并且供SQL Server 2000存放目前使用中的表,它是一个全局的资源,临时表和存储程序可供所有用户使用。每次SQL Server 2000启动时它会自动重建并且重设为默认大小,使用中它会依需求自动增长。(5)Northwind数据库Northwind是SQL Serve 2000提供的范例数据库,它包含一个称为Northwind Traders公司的销售数据库。 (6)pubs数据库。pubs数据库也是SQL Server 2000提供的范例数据库,它包含一个书籍出版公司的数据库范例。3)SQL Serve 2000提供的主要服务(1)MS SQL Server:运行SQL Server的服务。它管理着存储数据库的所有文件,处理所有客户应用传送来的T-SQL命令,执行其他服务器上的存储过程,并支持从多个不同数据源获取数据的分布式查询。(2)SQL Server Agent:管理 SQL Server周期性行为的安排,并在发生错误时通知系统管理员。它包括作业(Jobs)、警告(Alerts)和操作员(Operator)三部分。(3)Microsoft Server Service:一个全文本索引和搜索引擎。它可以在所选表列上创建有关词汇的特殊索引,T-SQL语言可以利用这些索引来支持语言搜索和近似搜索。(4)MS DTC(Microsoft Distributed Transaction Coordinator):管理包含不同数据源的事务。它可以正确提交分布式事务,以确保所有服务器上的修改都被保存或回退。其中,SQL Serve、SQL Server Agent和MS DTC可作为Windows NT/2000 服务来运行,Microsoft Server Service服务只能运行在 Window NT/2000 Server上。1.3SQL Server 2000的工具介绍1)服务管理器(Service Manager)SQL Server的服务管理器用来启动、停止和暂停SQL Server过程。必须在进行任何数据库操作前启动SQL Server。服务管理器可以从SQL Server的程序组中进行启动。如图1所示。图1SQL Server的启动启动后的SQL Server 服务管理器对话框如图2所示。对服务(MS SQL Server、SQL Server Agent和MS DTC) 的选择可用服务(Services)列表。双击绿、黄、红交通灯,就可以达到启动开始/继续(Start/Continue)、暂停(Pause)和停止(Stop)的目的。图2SQL Server 服务管理器2)企业管理器(Enterprise Manager)企业管理器(Enterprise Manager)是用户管理SQL Server 2000的主要工具和图形界面,用户可以在这个全图形界面的环境下建立数据库、表、数据、视图、存储过程、规则、默认值和用户自定义的数据类型等功能。Enterprise Manager主界面如图3所示。图3 SQL Server 的企业管理器3)查询分析器(Query Analyzer)查询分析器(Query Analyzer)提供的图形界面可用来分析一个或多个查询执行计划,查看数据结果并且依查询的方式提出最佳化的索引建立方式,以便改进查询效率。例如,查询pubs库中表jobs的内容,步骤如下:在Windows开始菜单中执行“程序|Microsoft SQL Server|查询分析器”命令,进入查询分析器对话框,如图4所示,在查询分析器窗口的数据库复选框中选择pubs库;在命令窗口中输入SQL语句:SELECT * FROM JOBS后,点击Execute Query按钮,查询结果便显示在输出窗口中。数据库复选框执行查询命令窗口输出窗口图4SQL Server查询分析器4)其他工具(1)事件探查器可以即时监督、捕捉、分析 SQL Server 2000的活动,对查询、存储过程、锁定、事务和日志的变化进行监视,以及在另一个服务器上重现所捕获的数据。如图5所示。(2)客户端网络实用工具(Client Network Utility)可以用来配置客户端到服务器的连接。(3)服务器网络实用工具(Server Network Utility)是 SQL Server 2000服务器端的网络配置界面。(4)导入和导出数据(Import and Export Data)提供了导入、导出以及在 SQL Server 2000和 OLE DB、ODBC及文件间转换数据的功能。(5)联机丛书(Book Online)提供了联机文档,包括有关操作维护的说明。(6)OLAP Services提供了在线分析处理功能(需要另外安装 OLAP管理工具)。图5创建跟踪的多选项卡对话框2 数据库的创建、修改和删除2.1创建SQL Server数据库通常可以采用以下3种方法来创建数据库。1)用企业管理器来创建数据库用企业管理器新建数据库的主要步骤如下:(1)在Windows开始菜单中执行“程序|Microsoft SQL Server|企业管理器”命令,进入SQL Server Enterprise Manager界面。在SQL Server Enterprise Manager展开SQL Server组,再展开数据库项,右击数据库,在弹出的快捷菜单中选择“新建数据库”命令,如图6所示。图6创建新的数据库(2)此时,弹出“数据库属性”对话框,在“常规”选择卡中,输入数据库的名称“studb”,对所建的数据库进行设置,如图7所示。图7数据库属性对话框(3)如果想改变新的数据文件,单击“数据文件”选择卡,如图8所示。如果要改变在文件名、位置、初始大小(MB)和文件组中提供的缺省值,单击适当的小格子,并键入新值。(4)可以从上面所示的选项中选择、指定数据库文件的增长方式和速率。(5)同样可以指定数据库文件的大小限制。(6)同理可以修改事务日志文件,单击“事务日志”选择卡。如果要改变在文件名、位置、初始大小(MB)和文件组中提供的缺省值,单击适当的小格子,并键入新值。图8“数据文件”选择卡2)利用SQL查询分析器来创建数据库在SQL查询分析器命令窗口中输入创建数据库的SQL语句后,点击“执行查询”按钮,就可以在输出窗口中直接看到语句的执行结果,如图9所示。图9 SQL查询分析器创建数据库3)利用“向导”来创建数据库利用“向导”创建数据库的主要步骤如下:(1)在SQL Server Enterprise Manager中展开SQL Server组,在菜单上选择“工具|向导”,如图10所示。(2)单击“数据库”,再双击“创建数据库向导”,如图11所示。(3)按照图上的向导,一步步的选择下去,即可创建数据库。图10选择“向导”创建数据库图11选择创建数据库向导2.2修改数据库在SQL Server Enterprise Manager中,展开SQL Server组,再展开数据库项,右击studb数据库,在弹出的快捷菜单中选择“属性”命令,此时出现“studb属性”数据库属性对话框,在该对话框中可以查看数据库的各项设置参数。在这个对话框的前四个选项卡中,可对建库时所作的设置进行修改,在“选项”选择卡(如图12所示)中还可对其他参数进行修改。图12数据库属性对话框2.3删除数据库在SQL Server Enterprise Manager中,展开SQL Server组,再展开数据库项,选择要删除的数据库名,右击鼠标选择“删除”命令,并在弹出的确认对话框中选择“是”即可。3表和主键的创建3.1表的创建利用企业管理器创建新表的步骤如下:(1)在SQL Server Enterprise Manager中展开SQL Server组,再展开数据库项,选择要建表的数据库studb,在“表”选项上右击鼠标,执行“新建表”命令,如图13所示。(2)在进入的设计表的字段的窗口界面,如图14所示。在各列中填写相应字段的列名、数据类型和长度后,在工具条上按保存按钮,在“选择表名称”对话框中输入新的数据表名称。图13选择“新建表”创建新表图14 新建表结构3.2主键的创建在创建的表时可以创建该表的主键,方法如下:(1)在图14的新建数据表结构中,选择要设为主键的列SNO。(2)在要建的主键列中单击右键,会弹出如图15所示的快捷菜单,选择“设置主键”,就出现如图16所示的设置主键后的界面。图15设置主键图16设置主键后的界面我们也可采用在SQL查询分析器中通过运行SQL语句来创建表。3.3用SQL查询分析器的命令方式来创建表可以用SQL语句在查询分析器的命令方式下来创建数据表。进入SQL查询分析器窗口,连接数据库后(在数据库组合框中选择studb),在“SQL查询分析器”界面命令窗口中输入创建课程表C和成绩表SC的SQL语句后,点击“执行查询”按钮,就可以在输出窗口中直接看到语句的执行结果,如图17所示。图17用SQL查询分析器的命令方式来创建表4数据的插入、修改、删除和查询在SQL Server Enterprise Manager中,对表进行数据的插入、删除、修改操作非常方便。4.1数据的插入(1)在SQL Server Enterprise Manager中,展开SQL Server 组,再展开数据库项,展开要插入数据的表(如S)所在的数据库(如studb),在选定的表上单击右键,在弹出的快捷菜单中选择“打开表|返回所有行”命令,然后出现数据输入界面,在此界面上可以输入相应的数据,如图18所示,点击“运行”按钮或关闭此窗口,数据都被自动保存。SQL 窗格运行图18 数据输入界面(2)用SQL语句插入数据的方法是:在图18所示界面中点击“SQL窗格”按钮,出现图19所示界面,在此界面的窗口中输入相应的SQL语句后,点击“运行”按钮,在出现的对话框中选择“确定”按钮,即可完成数据的插入。输入SQL语名窗口图19 执行SQL语句插入数据(3)在SQL查询分析器中用SQL语句插入数据的方法:进入SQL查询分析器,连接数据库后,(在数据库组合框中选择studb),在SQL查询分析器中的命令窗口中输入SQL语句,再执行该语句,也可实现数据的插入。例如向C表和SC表插入数据如图20所示。图20利用SQL查询分析器向数据表中插入数据4.2数据的修改在SQL Server Enterprise Manager中修改数据,如同插入数据一样进入数据输入界面,在此界面中对数据进行修改后,点击“运行”按钮或关闭此窗口,数据都被自动保存。也可点击“SQL窗格” 按钮,输入相应的修改数据的SQL语句后,点击“运行”按钮,修改后的数据被自动保存。也可进入SQL查询分析器,启动SQL语句的输入环境,在SQL查询分析器中的命令窗口中输入SQL的修改语句,再执行该语句,也可实现数据的修改。4.3数据的删除用上面同样的方法,打开要删除数据的表后,点击“SQL窗格”按钮,输入相应的删除数据的SQL语句后,点击“运行”按钮,删除数据的表被自动保存。 同样进入SQL查询分析器,启动SQL语句的输入环境,在SQL查询分析器中的命令窗口中输入SQL的删除语句,再执行该语句,也可实现对数据的删除。4.4数据的查询进入SQL查询分析器窗口,连接数据库后(在数据库组合框中选择studb),在SQL查询分析器中的命令窗口中输入SQL语句后,点击“执行查询”按钮,就可以在输出窗口中直接看到语句的执行结果,如图21所示。输出窗口SQL语句图21SQL查询结果5数据库的备份和恢复5.1数据库的备份(1)在SQL Server Enterprise Manager中,展开SQL Server组,再展开数据库项,选定要备份的数据库(studb),在选定的数据库上单击右键,在弹出的快捷菜单中选择“所有任务|备份数据库.”命令,如图22所示。弹出一个 “备份数据库”对话框,如图23所示。图22数据库备份菜单选择图23 备份数据库对话框(2)在图23的“备份数据库”对话框中,从“数据库”选择框中选择需要备份的数据库,在“名称”和“描述”中分别输入该设备备份的名称和简单描述。然后可以在“目的”中选择备份的设备。单击“添加”按钮,弹出一个“选择备份目的”对话框,如图24所示。图24选择备份目的对话框(3)从图24的“选择备份目的”对话框中点击文件名后的“”按钮,弹出一个“备份设备位置”对话框,如图25所示。在“备份设备”文件夹中选择作为备份目标的设备,在“文件名”中输入备份的文件名(studb_back),单击“确定”后,返回图24所示的选择备份目的对话框,再单击“确定”后,则返回图23所示的备份数据库对话框,这时在“目的”选择区域的框中就有了刚才选择的设备。如果选择不正确,还可以通过“删除”按钮删除选择的备份设备。此外,对本对话框的“调度”参数进行设定,可以选择周期性地或者以后某个时刻进行备份,设定好各个选项后,单击“确定”就可以进行备份了。图25备份设备位置对话框5.2数据库的恢复(1)在SQL Server Enterprise Manager中,展开SQL Server 组,再展开数据库项,在数据库项上单击右键,在弹出的菜单中选择“所有任务|还原数据库”命令,弹出一个“还原数据库”对话框。在对话框中的“还原为数据库”输入框中输入需要恢复的数据库的名称,然后在“还原”选项中选择“从设备”,如图26所示。再从图26的“还原数据库”对话框中,单击“选择设备”按钮,弹出一个“选择还原设备”对话框,从中再单击“添加”按钮,在弹出的“选择备份目的”对话框(图24)中点击文件名后的“”按钮,再从弹出的“备份设备位置”对话框(图25)中的“备份设备”文件夹中选择作为备份目标的设备,在“文件名”中输入备份的文件名(studb_back),单击“确定”后,返回图24所示的选择备份目的对话框,再单击“确定”后,则返回到“选择还原设备”对话框,如图27所示。这时在“还原自”选择区域的框中就有了需要还原的备份设备,单击“确定”返回“还原数据库”对话框,如图28所示。(2)选择“选项”选择卡,点击“在现有数据库上强制还原”复选框,如图29所示。单击确定按钮,即可进行数据库的恢复。图26还原数据库对话框图27选择还原设备对话框图28选择好设备的还原数据库对话框图29还原数据库“选项”选择卡对话框6高级应用技术6.1存储过程存储过程是存储在服务器上的预先编译好的SQL语句,可以在服务器上的SQL Server环境下运行。由于SQL Server管理系统中的数据库,因此最好在用户系统上运行存储过程来处理数据。存储过程可以返回值、修改值,将系统欲请求的信息与用户提供的值进行比较。它能识别数据库,而且可以利用SQL Server优化器在运行时获得最佳性能。1)存储过程概述用户可向存储过程传递值,存储过程也可返回内部表中的值,这些值在存储过程运行期间进行计算。广义上讲,使用存储过程有如下好处:(1)性能因为存储过程是在服务器上运行的,服务器通常是一种功能更强的机器,它的执行时间要比在工作站中的执行时间短。另外,由于数据库信息己经物理地在同一系统中准备好,因此就不必等待记录通过网络传递进行处理。存储过程具有对数据库即时的访问,这使得信息处理极为迅速。(2)客户服务器开发好处将客户端和服务器端的开发任务分离,可减少完成项目需要的时间。用户可独立开发服务器端组件而不涉及客户端,但可在客户方应用程序间重复使用服务器端组件。(3)安全性如同视图,可使用存储过程作为一种工具来加强安全性。可以创建存储过程来完成所有增加、删除和查询操作,并可通过编程方式控制上述操作中对信息的访问。(4)面向数据规则的服务器端措施这是使用智能数据库引擎的最重要原因之一,存储过程可利用规则和其他逻辑控制输入系统的信息。在创建用户系统时要切记客户用服务器模型。数据管理工作由服务器负责,因为报表和查询所需的数据表述和显示的操作在理想模型中应驻留在客户方。从而优化了用户处理应用程序的过程。虽然SQL Server被定义为非过程化语言,但SQL Server允许使用流程控制关键字。用户可以使用流程控制关键字创建一个过程,以便保存供后续执行。用户可使用这些存储过程对SQL Server数据库和其表进行数据处理,而不必使用传统的编程语言,如C或者C#编写程序。2)如何建立存储过程(1)用户可以使用CREATE PROCEDURE语句创建一个存储过程。在默认的情况下,执行所创建的存储过程的许可权归数据库的拥有者。数据库的拥有者可以改变赋给其他用户运行存储过程的许可。定义存储过程的语法格式如下:CREATE PROCEDURE procedure_name:number parameter data_typeVARYING=defaultOUTPUT ,n WITH RECOMPILEENCRYPTIONRECOMPILE, ENCRYPTIONFOR REPLICATIONASSql_statement ,n上述语句中的procedure_name(存储过程名)和Sql_statement(包含在存储过程中的任何合法的SQL语句)两个参数必须传递给CREATE PROCEDURE语句。可选项parameter data_type表示存储过程中定义的局部变量parameter,类型为 data_type。关键字OUTPUT表示允许用户将数据直接返回到在其他处理过程中要用到的变量中。返回值是当存储过程执行完成时参数的当前值。为了保存这个返回,在调用该过程时SQL调用脚本必须使用OUTPUT关键字。WITHRECOMPILEENCRYPTIONRECOMPILE, ENCRYPTIONFOR REPLICATION允许用户选择任何存储过程和执行过程。(2)用SQL Server Enterprise Manager来创建存储过程在Windows开始菜单中执行“程序|Microsoft SQL Server| 企业管理器”命令,进入SQL Server Enterprise Manager界面。在SQL Server Enterprise Manager中展开SQL Server 组,再展开数据库项,选择要创建存储过程的数据库(如studb),在“存储过程”选项上右击鼠标,执行“新建存储过程”命令,如图30所示。弹出一个“新建存储过程”窗口,如图31所示,在该窗口中输入存储过程。图30选择“新建存储过程”创建存储过程图31 “新建存储过程”窗口3)创建并调用一个带参数的存储过程举例(1)创建一个名为get_sc_name的存储过程,如图32所示。该存储过程根据提供的参数学号、课程号,返回相应的学生姓名、课程名。创建get_sc_name存储过程的语句如下:CREATE PROCEDURE get_sc_namesno char(6), cno char(2), sname char(8) OUTPUT,cname varchar(24) OUTPUT ASSELECT sname=SNAME, cname=CNAMEFROM S,C,SCWHERE S.SNO=SC.SNO AND C.CNO=SC.CNO AND SC.SNO=sno AND SC.CNO=cno图32 存储过程get_sc_name的创建窗口(2)调用一个带参数的存储过程,如图33所示。创建get_sc_name存储过程后,用户可以通过使用SQL 查询分析器工具调用该存储过程来调试其正确性,代码如下:DECLARE sname char(8), cname varchar(24)EXEC get_sc_name 'S1','C3',sname OUTPUT,cname OUTPUT;SELECT SNAME=sname,CNAME=cname图33 调用存储过程(get_sc_name) 的代码和运行结果6.2触发器触发器是SQL Server提供给程序员和数据库分析员确保数据完整性的一种方法。这些方法对于那些经常被大量的不同应用程序访问的数据库相当有用,因为它们使数据库增强了应用规则,而应用规则是依赖于应用软件的。1)SQL Server触发器的概念SQL Server有效地管理信息的能力来源于它在系统中控制数据的能力。存储过程的建立,使用户能够在服务器上执行逻辑,通过规则和默认值去帮助数据库更进一步地管理信息。SQL Server在信息被写入数据库之前确认规则和默认值。这对于信息是一种“预过滤器”,并且能基于数据项控制数据库活动的作用阻止数据项的活动。触发器是在数据更新后执行的“后置过滤器”,并且SQL Server已经确认了这些规则、默认值等。触发器是SQL Server执行的特殊类型的存储过程,它发生在对于一个给定表的插入、修改或删除操作执行后。由于触发器是在操作有效执行后才被运行,在修改中它们代表“最后动作”。假如触发器导致的一个请求失败的话,SQL Server将拒绝信息更新,并且对那些倾向于事务处理的应用程序返回一个错误消息。触发器最普遍的应用是实施数据库中的商务规则,当然在维持引用完整性方面,外键要比触发器更快,但触发器能够维持那些外键所不能处理的复杂关系。触发器不会明显影响服务器的性能。它们经常被用于增强那些在其他的表和行上进行很多级联操作的应用程序的功能。2创建触发器创建触发器的用户必须是该数据库的拥有者,当添加一个触发器到列、行或表的时候,就会改变怎样使表能够被访问,怎样使其他对象能够与之关联等。当然这种类型的操作为数据库拥有者所保留,以便防止有人无意中修改了系统的布局格式。创建触发器相当于说明一个存储过程,并且它有相似的语法。创建触发器的语法格式如下:CREATE TRIGGER trigger_nameON tableWITH ENCRYPTION FOR DELETE,INSERT,UPDATE WITH APPENDNOT FOR REPLICATIONAS Sql_statement n | FOR INSERT,UPDATE WITH APPENDNOT FOR REPLICATIONAS IF UPDATE(column)ANDORUPDATE(column) n|IF (COLUMNS_UPDATED()bitwise_operator)updated_bitmask)comparison_operatorcolumn_bitmasknSql_statementn上述语句中的trigger_name为所定义的触发器名称;关键字INSERT、UPDATE、DELETE定义了触发器的作用域,后者决定了启动触发器的操作;Sql_statement为包含在触发器中的任何合法的SQL语句。在Windows开始菜单中执行“程序|Microsoft SQL Server|企业管理器”命令,进入SQL Server Enterprise Manager界面。在SQL Server Enterprise Manager中展开SQL Server组,再展开数据库项,选择要创建触发器的数据库(如studb),再选中要创建触发器的表(如S),按右键,在弹出的菜单上选择“所有任务”命令,再选“管理触发器”命令,如图34所示,弹出一个“触发器属性”窗口,如图35所示,在该窗口中输入触发器代码。3)inserted和deleted 表当触发器被执行时,SQL Server创建一个或两个临时表(inserted或者deleted 表)。当一个记录插入到表中时,相应的插入触发器创建一个inserted表,该表镜像该触发器相连接的表的列结构。例如,当用户在S表中插入一行时,S表的触发器使用S表的列结构创建inserted表。对于插入到S表的每一行,相应地在inserted表中也包括该行。deleted表也镜象触发器相连接的表的列结构。当执行一条DELETE语句时从表中删除的每一行都包含在删除触发器内的deleted表中。图34 选择“管理触发器”命令图35 “触发器属性”窗口被UPDATE语句触发的触发器创建两个表inserted和deleted表,这两个表和它们相连接的表有相同的列结构。deleted 和inserted表分别包含相连接表中数据的“前后”快照。例如,假设用户执行下面的语句:UPDATE S SET SNO=S10 WHERE SNO=S9当该语句被执行时,S表中的更新触发器被触发。在触发器的inserted和deleted表中,该语句所改变的每一数据行都在这两个表中包含一行。deleted表中行的数据值是执行UPDATE语句之前的S表中行的数据值;inserted表中则是执行UPDATE语句后的S表中行的数据值。4)Update函数触发器降低了SQL Server事务的性能并且在事务执行时保持锁处于打开状态。如果用户的触发器逻辑只有当某些特定列改变时才需要运行,用户就应该检测这种情况的出现。Update函数可以帮助用户进行检测。Update函数只在插入和更新触发器中可用,它确定用户传递给它的列是否已经被引起触发器激活的insert或update语句所作用。例如在表S上定义更新触发器,使其阻止SNO列被执行,触发器定义如下:CREATE TRIGGER Trig_S_Upd ON SFOR UPDATEASIF update(SNO) ROLLBACK TRANSACTIONRETURN5)触发器检查用户可以使用触发器检查事务。例如,创建一个名为Trig_S的触发器,如图36所示。该触发器的功能是:将删除的学生数据转移到学生存档工程表SBACK中(假设已建立了与学生表S结构相同的学生存档表SBACK),我们可以如下定义触发器:CREATE TRIGGER Trig_S ON SFOR DELETEASINSERT SBACK SELECT SNO,SNAME,AGE,SEX,DNAME FROM deleted又如,创建一个名为Trig_SC_UPDATE_SCORE的触发器,使其具有如下功能:在修改成绩表(SC)的成绩SCORE时,要求修改后的成绩一定要比修改前的成绩高。我们可以如下定义触发器:CREATE TRIGGER Trig_SC_UPDATE_SCORE ON SC FOR UPDATEAS IF(SELECT COUNT(*) FROM deleted,inserted WHERE deleted.SCORE<=inserted.SCORE)=0ROLLBACK TRANSACTION其创建代码如图37所示。图36 触发器Trig_S代码图37 触发器Trig_SC_UPDATE_SCORE代码