110 likes | 251 Views
(1) 系统存储过程 系统存储过程是由系统提供的存储过程,可以作为命令执行各种操作。系统存储过程定义在系统数据库 master 中,其前缀是 sp_ ,它们为检索系统表的信息提供了方便快捷的方法. 7.1.1 存储过程的分类. (2) 本地存储过程 本地存储过程是指在用户数据库中创建的存储过程,这种存储过程完成用户指定的数据库操作,其名称不能以 sp_ 为前缀。. (3) 临时存储过程
E N D
(1) 系统存储过程 系统存储过程是由系统提供的存储过程,可以作为命令执行各种操作。系统存储过程定义在系统数据库master中,其前缀是sp_,它们为检索系统表的信息提供了方便快捷的方法 7.1.1 存储过程的分类 (2) 本地存储过程 本地存储过程是指在用户数据库中创建的存储过程,这种存储过程完成用户指定的数据库操作,其名称不能以sp_为前缀。 (3) 临时存储过程 临时存储过程属于本地存储过程。如果本地存储过程的名称前面有一个“#”,该存储过程就称为局部临时存储过程,这种存储过程只能在一个用户会话中使用。 (4) 远程存储过程 远程存储过程指从远程服务器上调用的存储过程。 (5) 扩展存储过程 在SQL Server环境之外执行的动态链接库称为扩展存储过程,其前缀是sp_。使用时需要先加载到SQL Server系统中,并且按照使用存储过程的方法执行。
7.1.2 用户存储过程的创建与执行 1. 通过SQL命令创建和执行存储过程 步骤如下: (1) 定义如下存储过程 USE XSBOOK GO CREATE PROCEDURE readers_info AS SELECT DISTINCT XS.借书证号,姓名,BOOK.ISBN,书名,索书号 FROM XS,JY,BOOK WHERE XS.借书证号=JY.借书证号 AND BOOK.ISBN=JY.ISBN GO (2) 调用存储过程 EXEC readers_info GO
7.1.2 用户存储过程的创建与执行 2. 利用企业管理器创建用户存储过程 (1) 在SQL Server企业管理器的目录树中,选中XSBOOK数据库文件夹下的存储过程图标右击,出现一快捷菜单,选择菜单项“新建存储过程”,进入新建存储过程窗口,如图所示; (2) 在新建存储过程窗口输入定义的存储过程,然后选择“确定”按钮。
7.1.3 用户存储过程的编辑修改 使用ALTER PROCEDURE命令可修改已存在的存储过程。 语法格式: ALTER PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ 0= default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION }] [ FOR REPLICATION ] AS sql_statements
7.1.4 用户存储过程的删除 如果确认一个数据库的某个存储过程与其它对象没有任何依赖关系,则可用DROP PROCEDURE语句永久地删除该存储过程。 语法格式: DROP PROCEDURE { procedure } [ ,...n ] 功能:从当前数据库中删除一个或多个存储过程或存储过程组。 参数含义: procedure指要删除的存储过程或存储过程组的名称;n:表示可以指定多个存储过程同时删除。
7.2.1 利用SQL命令创建触发器 1. 语法格式 CREATE TRIGGER trigger_name ON { table | view } /*指定触发器名及操作对象*/ [ WITH ENCRYPTION ] /*说明是否采用加密方式*/ { FOR | AFTER | INSTEAD OF } { [DELETE] [,] [INSERT] [,] [UPDATE] } /*定义触发器的类型*/ [ NOT FOR REPLICATION ] /*说明该触发器不用于复制*/ AS [ { IF UPDATE ( column ) [ { AND | OR } UPDATE ( column )] [ ...n ] | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask ) { comparison_operator } column_bitmask [ ...n ] } ] /*两个IF子句用于说明触发器执行的条件*/ sql_statements /* T- SQL语句序列*/
7.2.1 利用SQL命令创建触发器 2. 触发器中使用的特殊表 inserted 逻辑表:当向表中插入数据时,INSERT触发器触发执行,新的记录插入到触发器表和inserted表中。 deleted逻辑表:用于保存已从表中删除的记录,当触发一个DELETE触发器时,被删除的记录存放到deleted逻辑表中。 3. 使用触发器的限制 使用触发器有8种限制 4. 举例 对于XSBOOK数据库,如果在XS表中添加或更改数据,则向客户端显示一条信息。 /*使用带有提示消息的触发器*/ USE XSBOOK IF EXISTS (SELECT name FROM sysobjects WHERE name = 'reminder' AND type = 'TR') DROP TRIGGER reminder GO CREATE TRIGGER reminder ON XS FOR INSERT, UPDATE AS RAISERROR (4008, 16, 10) GO
7.2.1 利用SQL命令创建触发器 5. INSTEAD OF触发器的设计 如果视图的数据来自于多个基表,则必须使用INSTEAD OF 触发器支持引用表中数据的插入、更新和删除操作。 若在一个多表视图上定义了INSTEAD OF INSERT触发器,视图各列的值可能允许为空也可能不允许为空,若视图某列的值不允许为空,则INSERT语句必须为该列提供相应的值。 如果视图的列为以下几种情况之一: (1)基表中的计算列。 (2)IDENTITY INSERT为OFF的基表中的标识列。 (3)具有timestamp数据类型的基表列。
7.2.2 利用企业管理器创建触发器 要对XSBOOK数据库的JY表定义DELETE触发器,利用企业管理器实现步骤如下: (1) 进入企业管理器的目录树,展开XSBOOK数据库的文件夹,选中JY表的图标右击,出现一快捷菜单,选择“所有任务”菜单项下的“管理触发器”子菜单项,进入触发器属性面。 (2) 在“名称”中,单击“新建”,删除文本框中系统自动产生的内容,然后输入触发器的代码:
7.2.3 触发器的修改 1. 利用SQL命令修改触发器 语法格式: ALTER TRIGGER trigger_name ON ( table | view ) [ WITH ENCRYPTION ] { ( FOR | AFTER | INSTEAD OF ) { [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] } [ NOT FOR REPLICATION ] AS sql_statements } | { ( FOR | AFTER | INSTEAD OF ) { [ INSERT ] [ , ] [ UPDATE ] } [ NOT FOR REPLICATION ] AS { IF UPDATE ( column ) [ { AND | OR } UPDATE ( column ) ] [ ...n ] | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask ) { comparison_operator } column_bitmask [ ...n ] } sql_statements }
7.2.4 触发器的删除 1. 利用SQL命令删除触发器 语法格式: DROP TRIGGER { trigger } [ ,...n ] 功能:从当前数据库中删除一个或多个触发器。 参数含义: trigger:指要删除的触发器名称,包含触发器所有者名。 n:表示可以指定多个触发器。 USE XSCJ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'reminder' AND type = 'TR') DROP TRIGGER reminder GO 2. 通过企业管理器删除触发器