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