sql server 2008案例教程及实训 第11章 触发器
sqlserver2008触发器
初学sql server 2008之触发器触发器(trigger):是一种特殊的存储过程,可以用来对表实施复杂的完整性约束,保持数据的一致性。
当触发器所保护的数据发生改变时,触发器会自动被激活,并执行触发器中所定义的相关操作,从而保证对数据的不完整性约束或不正确的修改。
在SQL SERVER 2008中,有三种类型的触发器:(1)DML触发器:是指触发器在数据库中发生数据操作语言(DML)事件时将启用。
DML事件即指在表或视图中修改数据的insert、update、delete语句也。
(2)DDL触发器:是指当服务器或数据库中发生数据定义语言(DDL)事件时将启用。
DDL事件即指在表或索引中的create、alter、drop语句也。
(3)登陆触发器:是指当用户登录SQL SERVER实例建立会话时触发。
不过根据DML触发器触发的方式不同又分为以下两种情况:(1)AFTER触发器:它是在执行INSERT、UPDATE、DELETE语句操作之后执行触发器操作。
它主要是用于记录变更后的处理或检查,一旦发生错误,可以用Rollback Transaction语句来回滚本次扣件,不过不能对视图定义AFTER触发器。
(2)INSTEAD OF触发器:它在执行INSERT、UPDATE、DELETE语句操作之前执行触发器本身所定义的操作。
而INSTEAD OF触发器是可以定义在视图上的。
在SQL SERVER 2008中,DML触发器的实现使用两个逻辑表DELETED和INSERTED。
这两个表是建立在数据库服务器的内存中,由系统管理的逻辑表,我们对于它只有只读的权限。
DELETED和INSERED表的结构和触发器所在的数据表的结构是一样的。
当触发器执行完成后,它们也就会被自动删除。
INSERED表用于存放你在操件insert、update、delete语句后,更新的记录。
比如你插入一条数据,那么就会把这条记录插入到INSERTED表。
SQLServer(2008)中通过触发器进行数据同步的设置说明
SQLServer(2008)中通过触发器进行数据同步的设置说明根据公司领导要求,为了减轻数据库服务器上的压力。
特将其中一部分数据分离出来,放到另外一台数据库服务器上。
因此需要对基础数据进行一个同步操作。
要进行数据同步,可以通过代码、触发器、日志复制等。
因为此处涉及到的数据量不大,且不方便修改程序代码。
所有采取的是Sql Server中触发器的一个同步。
下面就对触发器进行数据同步的一些配置做下说明:环境:Sql Server 2008Windows Server 20081.确定两台数据库服务器上要进行同步的数据库及表结构2.在作为数据源的数据库服务器上对应的表上创建触发器:(204.17是数据源服务器,201.17是要同步的服务器)例子中的触发器的作用是将102.1.204.17服务器上test数据库中user表中的数据同步到201.17上的表中去(触发条件是任何添加、修改、删除操作)。
3.启动两台服务器上的Distributed Transaction Coordinator服务(开始--运行--services.msc 回车,找到前面的这个服务--启动)4.MSDTCMSDTC设置windows server 2003设置:windows server 2008设置:5.检查防火墙。
可以关闭防火墙或把MSDTC加入例外。
6.检查两台服务器通信是否正常:a) telnet DbIP 135是否可以通;b) 然后相互Ping IP;c) 再ping 相互的NetBios名称(输入ping -a ip就可以看到对应的NetBios名称),还不通的话d) 可以修改%windir%/system32/etc/hosts,或%windir%/system32/etc/lmhost.sam去掉文件扩展名,进行DB 服务和IP的绑定即可,如下图所示:到这里通过触发器进行数据库分布式开发的环境就准备好了。
SQLServer2008基础教程11
Saturday, December 12, 2020
第24页
触发器的概念和类型
一般地认为,触发器是一种特殊类型的存 储过程,它包括了大量的Transact-SQL语 句。但是触发器又与存储过程不同,存储 过程可以由用户直接调用执行,而触发器 不能被直接调用执行,它只能自动执行。 按照触发事件的不同,可以把Microsoft SQL Server 2008系统提供的触发器分成 两种类型,即DML触发器和DDL触发器。
Saturday, December 12, 2020
第35页
创建accountData表
Saturday, December 12, 2020
第36页
创建auditAccountData表
创建t_accountData_insert触发器
创建t_accountData_delete触发器
一组插入数据的操作
向表中插入数据时,INSERT触发器触发执行。当 INSERT触发器触发时,新的记录增加到触发器表中和 inserted表中。inserted表是一个逻辑表,保存了所插入 记录的备份,允许用户参考INSERT语句中数据。触发器 可以检查inserted表,来确定该触发器的操作是否应该执 行和如何执行。在inserted表中的记录,总是触发器表中 一行或多行记录的冗余。
Saturday, December 12, 2020
第22页
使用OBJECT DEFINITION元数 据函数
Saturday, December 12, 2020
第23页
11.2 触发器
Microsoft SQL Server 2008系统提供了两 种强制业务逻辑和数据完整性的机制,即 约束技术和触发器技术。第9章已经讲过了 约束技术,本节将讲述触发器技术。
SQL Server2008创建修改触发器-可视化方式
select * from deleted select * from inserted END
9 创建修改触发器实例
10 创建修改触发器实例
创建触发器后,在C表中修改一条记录,会显示出修改前后课程信息的变化情况。 update c set tname='孙丽' where cno='c2'
SQL Server2008创建修改触发器—可视化方式
Create update trigger with a visual mode in SQL Server2008
2
知识点内容概要
创建触发器步骤 创建修改触发器实例
3 创建触发器步骤
操作步骤如下: 启动【SQL-MS】,展开指定【数据库】结点,展开【表】结点,展开指定【表】 结点,右击【触发器】,单击【新建触发器】。
5 创建修改触发器实例
6 创建修改触发器实例
在执行t3触发器之前,表SC中的选课信息为:
7 创建修改触发器实例
创建触发器后,修改S表中一条记录,选课信息相应改变。 update s set sno='s7' where sno='s1'
8 t4,显示修改前后课程信息的变化。 CREATE TRIGGER t4
4 创建修改触发器实例
【实例1】在S表上创建修改触发器t3,若修改S表中学生的学号,则SC表中与该
学生相关的学号自动修改。 CREATE TRIGGER t3 ON s FOR UPDATE AS BEGIN
DECLARE @snonew CHAR(4),@snoold CHAR(4) SELECT @snoold=sno FROM DELETED SELECT @snonew=sno FROM INSERTED UPDATE sc SET sno=@snonew WHERE sno=@snoold END
sql2008触发器语句
sql2008触发器语句摘要:1.SQL Server 2008 简介2.触发器的概念与作用3.SQL Server 2008 触发器语句的基本结构4.触发器语句的类型与应用场景5.触发器语句的示例与实践正文:【1.SQL Server 2008 简介】SQL Server 2008 是微软推出的一款关系型数据库管理系统,它提供了强大的数据存储、查询和处理功能,被广泛应用于企业级数据解决方案中。
【2.触发器的概念与作用】触发器(Trigger)是一种在对表执行某些操作(如插入、更新或删除数据)时自动执行的存储过程。
触发器可以帮助维护数据的完整性和一致性,简化应用程序的开发和维护。
【3.SQL Server 2008 触发器语句的基本结构】在SQL Server 2008 中,触发器语句的基本结构如下:```CREATE TRIGGER trigger_nameON table_nameFOR EVENT typeASBEGIN-- 触发器执行的操作END;```其中,`trigger_name`是触发器的名称,`table_name`是触发器所关联的表名,`type`表示触发器要监听的事件类型,如INSERT、UPDATE 或DELETE。
【4.触发器语句的类型与应用场景】根据触发器执行的操作不同,可以将触发器分为三类:1.INSERT 触发器:在向表中插入新数据时执行。
应用场景包括:数据验证、数据分页、数据备份等。
2.UPDATE 触发器:在更新表中数据时执行。
应用场景包括:数据验证、数据审计、数据同步等。
3.DELETE 触发器:在删除表中数据时执行。
应用场景包括:数据备份、数据审计、数据同步等。
【5.触发器语句的示例与实践】假设有一个名为`orders`的表,包含以下字段:`order_id`(订单编号)、`order_date`(订单日期)和`total_amount`(订单总金额)。
现在需要创建一个触发器,在向该表插入新数据时,计算订单总金额并与1000 进行比较,如果大于1000 则将订单日期更新为当前日期。
SQLSERVER课件触发器
Insert 触发器
当试图向表中插入数据时,将执行Insert触 发器
Insert 触发器执行下列操作:
向Inserted表中插入一个新行的副本 检查Inserted表中的新行,确定是否要阻止该插
入操作。 如果所插入的行中的值是有效的,则将该行插
入到触发器表中。
10
Insert 触发器示例
Sp_configure ‘nested trigger’,1
要禁用触发器嵌套,请执行下面的语句:
Sp_configure ‘nested trigger’,0
21
触发器与性能
由触发器引起的开销通常较低。 大部分时间花费在引用逻辑表以外的其它表上。 Deleted和Inserted逻辑表始终位于内存中。
15
DELETE触发器示例
16
不能在触发器中使用的语句
17
INSTEAD OF 触发器
包含代替原始数据操作语句的代码 主要优点是可以使不能更新的视图支持更新 另外,可以拒绝批处理中的某系部分同事允许批
处理的其它部分成功
18
视图的INSTEAD OF触发器示例
19
级联触发器
级联触发器用于强制引用的完整性 当某个表发生修改时,级联触发器会修改
的更新
12
列级UPDATE触发器
13表级UPDATE触发器示例源自14DELETE触发器
当试图从表中删除数据时,将执行DELETE 触发器
DELETE触发器执行下列操作:
从触发器表中删除行。 将删除的行插入到Deleted表中。 检查Deleted表中的行,以确定是否需要或应如
何执行触发器操作。
3
触发器触发示例
员工表
退休员工表
电子工业出版社-15040-《SQL Server实例教程(2008版)》-电子教案-第11章-66页精选文档
本不支持“用户在下次登录时必须更改密码”功能,请取 消该选项。
2020/2/2 S Q L S e r v e r 案 例 教 程 ( 2 0 0 8 版 )
二、使用 SSMS 管理登录名
(二)查看登录属性
【任务1-4】查看sa用户的属性,并将其登录状态设置为“启用”。 (三)删除登录名
任务5-2 使用T-SQL语句创建名称为myschema的架构,其所有者为登录名newuser
任务5-3 使用T-SQL语句将WebShop数据库下的Users表的架构更改为dbo
2020/2/2 S Q L 任S务e5r-v4 e r 案使例用教T-S程Q(L语2句0 0删8除版架)构myschema
SQL Server 实例教程 (2008版)
第 11 章 数据库安全操作
提出一个问题,往往比解决一个问题更重要
——爱因斯坦
本章导航
2020/2/2 S Q L S e r v e r 案 例 教 程 ( 2 0 0 8 版 )
本章任务描述
任务编号 任务1
任务2
子任务
任务1-1 任务1-2 任务1-3 任务1-4 任务1-5 任务1-6 任务1-7 任务1-8
任务3-6 使用T-SQL查看当前服务器中数据库角色的情况
任务3-7 管理应用程序角色
任务4
使用SSMS语句和T-SQL语句实现权限的管理
任务4-1 使用SSMS管理“Customers”表的权限
任务4-2 使用T-SQL 语句授予用户“winuser”对WebShop数据库中的Goods表的查询和删除权限
2020/2/2 S Q L S e r v e r 案 例 教 程 ( 2 0 0 8 版 )
11第11章-SQL-Server-2008-数据库备份和恢复
本章知识结构框图程序员的优秀品质之11 韬光养晦,雅量容人出自明代洪应明《菜根谭》,原文为:持身不可太皎洁,一切污辱垢秽要茹纳得;与人不可太分明,一切善恶贤愚,要包容得。
一个成品程序的诞生,要靠团队的合作完成。
程序员要具有团队合作精神,一朵花再美,如果园子里只有这种花,也会显得单调,只有各具特色的花汇集在一起,才能织出春天的图画。
每个人都有各自的优缺点,做人不要太清高,所有的污垢和羞辱都要容忍得下。
与人交往不要太分明,所有好坏善恶的人都能容下。
不要希望第11章 SQL Server 2008 数据库备份和恢复知识模块1 ☞数据库基础 ☞常见主流数据库 ☞数据库核心技术-SQL 知识模块2 ☞认识SQL Server 2008 ☞SQL Server 2008的安装 ☞登录SQL Server 知识模块3 ☞ Microsoft SQL Server Management Studio ☞ SQL Server 配置管理器别人和你一样,他不如你,他有他的特色,人至察则无友,水至清则无鱼。
一个人的力量总是单枪匹马,众人的力量才能移山倒海,广交朋友,依靠团队的力量,合作出软件精品。
学习激励与案例导航程序人生之腾讯公司首席执行官马化腾马化腾,腾讯公司执行董事、董事会主席兼公司首席执行官(CEO),全面负责腾旭集团的策略规划、定位和管理.现有资产245亿元,2009年胡润百富榜第16名。
1933年毕业于深圳大学计算机专业.与任何人创业一样,最初的马化腾和他的腾讯日子都非常艰难,2000年第一次网络泡沫席卷了全中国的互联网,那时的腾讯难以为继,中华网、新浪网都不可接手.没有办法,马化腾几乎是倾尽所有。
那时的马化腾虽然执着,却也迷茫,不知道自己的QQ赢利点在哪里?后来得益于风险投资公司帮助腾讯在香港上市,腾讯当时是没有现金资本的,唯一的资源就是高达7。
147亿的QQ用户。
QQ上市后,马化腾的个人身价迅速飙升,升价17亿港币!马化腾在不经意间打造了一个庞大的QQ帝国,改变了中国人沟通的方式,手机、电话、QQ成了现代青年沟通的三大工具。
SQL Server2008创建修改触发器-SQL语句方式
create update trigger with SQL statement in SQL Server2008
ቤተ መጻሕፍቲ ባይዱ 2
知识点内容概要
创建触发器语法 创建修改触发器实例
3 创建触发器语法
CREATE TRIGGER触发器名 ON 表名 FOR|After|Instead of 触发动作(insert|delete|update) AS
5 创建修改触发器实例
【实例1】在表s上创建Update触发器,实现表s修改数据时与表n间数据的一致性。
create trigger s_update on s for update as begin
declare @class char(4),@sex char(2) select @class=class,@sex=sex from deleted
if @sex='男' update n set num=num-1,man=man-1 where class=@class
else update n set num=num-1,woman=woman-1 where class=@class
6 创建修改触发器实例
select @class=class,@sex=sex from inserted
else update n set num=num+1, woman=ISNULL(woman,0)+1 where class=@class
End
7 创建修改触发器实例
8 创建修改触发器实例
查看表N当前数据为:
9 创建修改触发器实例
在s表中修改一条记录: update s set sex='男' where sno='s3'
sqlserver2008存储过程与触发器
sqlserver2008存储过程与触发器SQL Server2008存储过程与触发器在SQL Server 2008中存储过程和触发器是两个重要的数据库对象。
使⽤存储过程,可以将Transact-SQL语句和控制流语句预编译到集合并保存到服务器端,它使得管理数据库、显⽰关于数据库及其⽤户信息的⼯作更为容易。
⽽触发器是⼀种特殊类型的存储过程,在⽤户使⽤⼀种或多种数据修改操作来修改指定表中的数据时被触发并⾃动执⾏,通常⽤于实现复杂的业务规则,更有效地实施数据完整性。
本章学习⽬标了解存储过程的作⽤及类型掌握存储过程的创建及应⽤熟悉存储过程的管理了解触发器的作⽤及分类熟悉各种类型触发器的创建了解嵌套、递归触发器熟悉触发器的管理8.1 认识存储过程Transact-SQL语句是应⽤程序与SQLServer数据库之间的主要编程接⼝,⼤量的时间将花费在Transact-SQL语句和应⽤程序代码上。
在很多情况下,许多代码被重复使⽤多次,每次都输⼊相同的代码不但繁琐,更由于在客户机上的⼤量命令语句逐条向SQLServer发送将降低系统运⾏效率。
因此,SQLServer提供了⼀种⽅法,它将⼀些固定的操作集中起来由SQLServer数据库服务器来完成,应⽤程序只需调⽤它的名称,将可实现某个特定的任务,这种⽅法就是存储过程。
下⾯将详细介绍存储过程的概念、特点、创建、执⾏等内容。
8.1.1 存储过程概述SQL Server中T-SQL语⾔为了实现特定任务⽽将⼀些需要多次调⽤的固定的操作编写成⼦程序并集中以⼀个存储单元的形式存储在服务器上,由SQL Server数据库服务器通过⼦程序名来调⽤它们,这些⼦程序就是存储过程。
存储过程是⼀种数据库对象,存储在数据库内,可由应⽤程序通过⼀个调⽤执⾏,⽽且允许⽤户声明变量、有条件执⾏,具有很强的编程功能。
存储过程可以使⽤EXECUTE语句来运⾏。
在SQL Server中使⽤存储过程⽽不使⽤存储在客户端计算机本地的T-SQL程序有以下⼏个⽅⾯的好处。
实训指导书(10)触发器
实训10 触发器1、实训目的(1)理解触发器的作用(2)掌握创建触发器的方法;(3)掌握查看触发器信息的方法;(4)掌握删除和修改触发器的方法。
2、素材准备SQL Server 2005,Xk数据库,YGGL数据库。
实验准备:1)创建用于企业管理的员工管理数据库,数据库名为YGGL,包含员工的信息、部门信息以及员工的薪水信息。
数据库YGGL包含下列3个表:(1)employees:员工信息表。
(2)departments:部门信息表。
(3)salary:员工薪水情况表。
各表的结构如下:employees表结构2)在企业管理器中向表employees,departments、salary中加入记录employees表departments表salary表3、实训内容3.1基本训练1、完成教材中的例题。
(50分钟)2、对于yggl数据库,表employees的departmentid列与表departments的departmentid列应满足参照完整性规则,即:●向employees表添加一记录时,该记录的departmentid值在departments表中应存在。
●修改departments表的departmentid字段值时,该字段在employees表中的对应值也应该修改。
●删除departments表中一记录时,该记录的departmentid字段值在employees表中对应的记录也应该删除。
上述参照完整性规则,在此通过触发器实现。
3、对于yggl数据库,表employees的employeeid列与表salary的employeeid列应该满足参照完整性规则,请用触发器实现两个表间的参照完整性。
●向salary表添加一记录时,该记录的employeeid值在employees表中应存在。
●修改employees表的employeeid字段值时,该字段在salary表中的对应值也应该修改。
SQL server 2008 存储过程和触发器
在如下的批处理中,声明一个局部游标变量,执行上述存储过程过程并将游标 赋值给局部游标变量,然后通过该游标变量读取记录。
DECLARE @MyCursor CURSOR EXEC reader_cursor @reader_cur = @MyCursor OUTPUT FETCH NEXT FROM @MyCursor WHILE (@@FETCH_STATUS = 0) FETCH NEXT FROM @MyCursor CLOSE @MyCursor DEALLOCATE @MyCursor GO
说明: (1)参数@return_status为可选的整型变量,保存存储过程的返回状态, EXECUTE语句使用该变量前,必须对其定义。 (2)参数module_name是要调用的存储过程或用户定义标量函数的完全限定 或者不完全限定名称。number用于调用已定义的一组存储过程中的某一个。 @module_name_var表示局部定义的变量名,保存存储过程或用户定义函数的名称。 (3)@parameter表示CREATE PROCEDURE或CREATE FUNCTION语句中定义的参 数名,value为实参。如果省略@parameter,则后面的实参顺序要与定义时参数的 顺序一致。在使用@parameter_name=value格式时,参数名称和实参不必按在存储 过程或函数中定义的顺序提供。但是,如果任何参数使用了 @parameter_name=value格式,则对后续的所有参数均必须使用该格式。@variable 表示局部变量,用于保存OUTPUT参数返回的值。DEFAULT关键字表示不提供实参, 而是使用对应的默认值。
1.通过T-SQL命令创建存储过程 如果要通过SQL命令定义一个存储过程查询XSBOOK数据库中每位读者当前的借 书情况,然后调用该存储过程,实现步骤如下 : ① 定义如下存储过程 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 说明:
上机实训11 SQL Server 2008之规则、存储过程和触发器
上机实训07存储过程和触发器学号______________姓名____________任务描述启动SQL server 2008,附加数据库xscjglDB,执行相应的操作。
任务描述对数据库xscjglDB中的表设置相关的规则。
设计过程1.创建成绩的规则(0分-100分)CREATE RULE cj_rule AS @cj BETWEEN 0 and 1002.将cj_rule规则绑定到成绩信息表的成绩字段上:EXEC sp_bindrule'cj_rule','成绩信息表.成绩'3.创建性别的规则,并绑定到学生信息表的性别列上。
Createrule xb_rule As @xb='男' or @xb='女'GoExec sp_bindrule 'xb_rule','学生信息表.性别'4.将cj_rule规则删除第一步:要解除绑定到成绩信息表的成绩列上的规则,可以使用下面SQL语句:EXEC sp_unbindrule'成绩信息表.成绩'第二步:解除规则的绑定后,就可以使用DROP RULE语句删除,其语法格式如下:DROP RULE cj_rule任务描述对数据库xscjglDB中创建的使用存储过程。
设计过程1.简单的存储过程proxs_list,用于显示学生信息:USE xscjgldbgoCREATEPROCEDURE proxs_listASSELECT 学号,姓名,性别FROM 学生信息表goexec proxs_list成果展示(裁图):2.下面的SQL语句创建一个存储过程xspjcj,当输入学生姓名时,显示学生的各科的平均成绩。
USE xscjglDBgocreate proc xspjcj@xm char(10)asselect AVG(成绩) from 学生信息表,成绩信息表where 学生信息表.学号=成绩信息表.学号and 学生信息表.姓名=@xmgoexec xspjcj‘郭俊’成果展示(裁图):3.下面的SQL语句创建了一个用于向班级信息表中插入记录的存储过程USE xscjglDBGOCREATE PROC pro_Addbj(@bjh nvarchar(255),@bjm nvarchar(255),@zy nvarchar(255),@yj float,@tea varchar(255))ASINSERT INTO 班级信息表VALUES(@bjh,@bjm,@zy,@yj,@tea)GOEXEC pro_Addbj 'bj1501','计算机班1501班','计算机网络',2015,'tc002'GoSelect * from 班级信息表成果展示(裁图):任务描述对数据库xscjglDB中创建的使用触发器。
SQL Sever 2008触发器
[ NOT FOR REPLICATION ]
AS [ { IF UPDATE ( column ) [ { AND | OR } UPDATE ( column ) ] [ ...n ] }] sql_statement [ ...n ] } }
第11章 触发器
trigger_name:是触发器的名称 。 Table | view:是在其上执行触发器的表或视图 。
第11章 触发器
deleted 表和 inserted 表 deleted 表用于存储 DELETE 和 UPDATE 语句所影 响的行的备份。在执行 DELETE 或 UPDATE 语句时, 行从基本表中删除,并转移到 deleted 表中。 deleted 表和基本表通常没有相同的行。
inserted 表用于存储 INSERT 和 UPDATE 语句所影响 的行的备份。在一个插入或更新事务处理中,新建行 被同时添加到 inserted 表和基本表中。inserted表 中的行是基本表中新行的备份。
AFTER:指定触发器只有在触发 SQL 语句中指定的所 有操作都已成功执行后才激发。如果仅指定 FOR 关键 字,则 AFTER 是默认设置。 INSTEAD OF:指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的操作。
AS:是触发器要执行的操作。
sql_statement:是触发器的条件和操作。
sp_help sp_helptext sp_depends sp_helptrigger
第11章 触发器
11.3.2 修改触发器
1.使用企业管理器修改触发器的正文 – 在详细信息窗格中,右击将在其上创建触发器的表, 指向“所有任务”菜单,然后单击“管理触发器”命 令。在“名称”中框中选择触发器的名称。 – 在“文本”框中更改触发器的文本。用 CTRL+TAB 键来缩进触发器的文本。 若要检查语法,单击“检查语法”命令。 –单击“确定”按钮,即可关闭该对话框,成功修改触 发器。
SQL SERVER 2008 使用INSTEAD OF触发器
SQL SERVER 2008 使用INSTEAD OF触发器INSTEAD OF触发器被用于更新那些没有办法通过正常方式更新的视图。
通常不能在一个基于连接的视图上进行DELETE操作,可以编写一个INSTEAD OF DELETE触发器来实现删除。
可以访问那些如果视图是一个真正的表时已经被删除的数据行,它将把删除的行存储在deleted临时表中。
本次练习将通过具体的例子介绍如何使用INSTEAD OF触发器,使读者掌握INSTE AD OF触发器的使用方法。
向student表中插入数据时,检查学号是否存在于student 表中,如存在则进行插入操作,否则就不插入,具体语句如下所示:CREA TE TRIGGER [checkid]ON dbo.studentINSTEAD OF insertASIF NOT EXISTS(SELECT * FROM dbo.student WHERE ID=(SELECT ID FROM INSERTED))BEGINROLLBACK TRANSACTIONPRINT '要处理记录的学号不存在!'ENDELSEBEGININSERT INTO dbo.student select * from insertedPRINT '已经成功处理记录!'END执行以上代码后,然后,输入以下代码进行测试,代码如下:INSERT INTO dbo.studentV ALUES(6,'史琳达','女',20,'006')执行以上代码测试结果8-10所示:然后,输入以下测试及查询代码,结果如图8-11所示:图8-11 测试结果。
(完整版)SQL Server 数据库案例教程课后习题答案
《SQL Server 2008 数据库案例教程》练习题及模拟试卷答案第 1 章一、判断题1.数据库技术是是计算机数据处理与信息管理系统的核心。
(√)2.数据是用于描述现实世界中具体事物或抽象概念,可存储的数字符号。
(×)3.数据库是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。
(√)4.数据库管理系统是一个按数据结构来存储和管理数据的服务器管理系统。
(×)5.关系数据库,是建立在关系模型基础上的数据库。
(√)二、单选题1.数据(Data)是一些可存储并具有明确意义的(A)A.符号B.图形C.文字D.数字2.人工阶段计算机用于数值计算,没有操作系统及管理数据的软件。
这一阶段的年代是(C)A.19 世纪80 年代B. 20 世纪20 年代C.20 世纪50 年代D. 20 世纪80年代3.在网页中常用的图像格式是(D)A..bmp 和.jpgB..gif 和.bmpC. .png 和.bmpD. .gif 和.jpg4.数据库系统的重要特征是什么?(D)A.数据的独立性和动态性B.数据的静态性和独立性C.数据的动态性和共享性D.数据的独立性和共享性三、多选题1.与数据库技术密切相关的基本概念有(ABCD)A.数据B. 数据库C. 数据库管理系统D. 数据库系统2.数据库可分为哪几种类型?(ABC)A.关系型数据库B. 网状数据库C. 层次数据库D.树形数据库3.DBMS 提供数据操作语言 DML,为用户提供了哪些操作?(ABCD)A.数据的追加 B.数据的删除 C.数据的更新 D.数据的查询4.DBMS 要分类组织、存储和管理各种数据,包括哪些内容?(ABC)A.数据字典B. 用户数据C. 存取路径D.服务器5.目前,DBMS 常见品牌有哪些公司?(ABC)A.微软公司的 SQL Server B.IBM 公司的 DB2 C.甲骨文公司的 ORACLE D.索尼公司的 MySQL四、填空题1.数据库(管理)技术经历了人工管理阶段和文件管理阶段。
《SQL Server 2008数据库设计教程》教学课件 第11章
【例11-4】修改jw数据库中的存储过程pro_class,实现从Class数据表中获取 学校全部班级的班级编号和名称。
1〕使用sp_recompile系统存储过程强制在下次执行存储过程时对其重新编 译,其调用语法格式如下:
sp_recompile[@objname=] 'object'
其中,object为存储过程名。
2〕在创立存储过程时的定义中指定WITH RECOMPILE选项,指明SQL Server 2021将不为该存储过程执行缓存方案,在每次执行该存储过程时都对 其重新编译。此外,当存储过程的参数值在各次执行时都有较大差异,导致每 次均需创立不同的执行方案时,也可以使用WITH RECOMPILE选项。该选项 并不常用,因为每次执行存储过程时都必须对其重新编译,这样会导致存储过 程的执行速度变慢。
存储过程与视图的区别如下:
1〕可以在单个存储过程中执行一系列Transact-SQL语句。存储过程可包含 程序流、逻辑以及对数据库查询的Transact-SQL语句,而视图中只能是SELECT 语句。
2〕视图不能接收参数,只能返回结果集;而存储过程可以接收参数,包括 输入参数、输出参数,并能返回单个或多个结果集以及返回值,这样一来大大提 高了应用的灵活性。
其中,EXEC语句中的WITH RECOMPILE选项的作用是要求系统重新编译该 存储过程,并将已经编译的执行方案存储在高速缓冲存储区中。@parameter为存 储过程参数,调用者向存储过程所传递的参数值由value和@variable变量提供。 OUTPUT关键字说明指定参数为返回参数。在执行存储过程中,一个过程还可以再 调用其他存储过程,形成过程的嵌套调用。在SQL Server中允许存储过程的最大嵌 套级数为16。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
END
【例11.2】创建一个简单的DML触发器,当读者还书的时候, 计算其逾期罚款。
Create TRIGGER [dbo].[update_up] ON [dbo].[BorrowList] AFTER UPDATE
触发器是一个在修改指定表中的数据时 执行的存储过程。经常通过创建触发器来强 制实现不同表中的逻辑相关数据的引用完整 性或者一致性。当对某一表进行诸如 UPDATE、INSERT、DELETE 这些操作时, SQL Server 就会自动执行触发器所定义的 SQL 语句
11.1 触发器简介
11.1.1 触发器的概念 11.1.2 触发器的类型
SET NOCOUNT OFF --不返回结果 DECLARE @delcount INT DECLARE @BookNo CHAR(6)
-------------------更新(级联更新)--------------------IF UPDATE(图书编号)
BEGIN
UPDATE BorrowList SET 图书编号=(SELECT 图书编号 FROM inserted) WHERE 图书编号 in (SELECT 图书编号 FROM deleted)
可以指定第一个和最 后一个触发器执行动 不适用 作
不允许
允许
(1)DML触发器
在建立DML触发器时,①要指定触发操作:insert、
update或delete。至少要指定一种操作,也可以同时
指定多种。②在同一个表中可以创建多个after触发
器,但在表或视图上,每个insert、update或delete 语句最多可以定义一个instead of触发器。
WHERE 图书名称=‘电脑乐园’
消息如下:
更新BookInfo表的数据
【例2】 创建级联删除的触发器,当有人试图 删除BookInfo表的信息时,利用触发器级联删除 与之相关的BorrowList表中的信息。
CREATE TRIGGER triDelete_Book ON BookInfo FOR DELETE AS BEGIN
--测试触发器 update BorrowList set 实际归还时间='2013-08-23' where 借阅编号='9'
11.3.2 修改触发器
alter trigger [所有者.]触发器名称 on {[所有者.]表名|视图} {for|after|insteadof} {[insert][,][update][,][delete]} [not for replication] as
在“对象资源管理器”中,展开数据库目录,找到需要 修改触发器的表,展开表目录,展开触发器节点目录, 右击需要删除的触发器,如图11.5所示,单击快捷菜单 中的“删除”命令。
11.3 使用T-SQL创建和使用触发器
create用triCgRgEeArT触E 发TR器I名GG称ER语句创建DML触发器, o要n {注表意名|的视是图}该语句必须是批处理中的第一条 {f语or句|af,ter并|in且ste只ad能o应f} 用于一个表。CREATE { T[iRnIsGeGrEt R][语,][u句p的da部te]分[,]语[d法ele格te式] }如下:
【例4】在BookInfo表和BorrowList表之间具有逻辑 上的主外键关系,要求当删除或更新图书信息的时候, 要激发触发器tri_Update_Delete ,并在BorrowList表 中删除或更新相对应的记录行 。
CREATE TRIGGER tri_Update_Delete ON BookInfo FOR UPDATE, DELETE AS
(2)DDL触发器
DDL触发器是响应create、alter、drop、grant、 deny、revoke 和 update statistics 等语句而触发的。
11.2 界面中创建和使用触发器
11.2.1 创建触发器 11.2.2 修改触发器 11.2.3 删除触发器
11.2.1 创建触发器
11.1.2 触发器的类型
1.类型
根据触发事件的不同,将触发器分成两大类: DML触发器和DDL触发器。
(1)DML触发器。DML触发器是一种与表紧密关联的特殊 的存储过程,当数据库中发生数据操作语言(DML)事件 (Insert、Update、Delete)时将调用DML触发器。
● AFTER触发器 ● INSTEAD OF触发器
11330011
update sell set 数量=22 where 销售编号=5
deleted表
销售 编号
商品 编号
数量
售出时间
5 7 2 2005-1-3
售货员 工编号
1301
t_score表
S_number C_number Score credit
040101
1
040101
5
040101
11.1.1 触发器的概念
触发器是一种特殊的存储过程,在语言事件发 生时,所设置的触发器就会自动被执行,以进行维 护数据完整性或其他一些特殊的任务。
与上一章介绍的一般意义的存储过程不同,触 发器是当发生UPDATE、INSERT、DELETE 这些操作 时自动执行的存储过程。不能直接被调用,也不能 传递或接受参数。
人试图更新BookInfo表的信息时,利用触发器产
生提示SE 图书借阅信息数据库 GO CREATE TRIGGER tri_UpdateBooks
Instead of 改为 For
ON BookInfo
IAPnrSsinteta‘d更O新f UBPoDokAITnEfo表的数据'-USE-PT测D作试A者T触=E发‘B谭器oo宇k之In’fo
(2)DDL触发器。DDL触发器是在响应数据定义语言 (DDL)语句时激发。
这些语句主要是以CREATE、ALTER和DROP开头的 语句。DDL触发器可用于管理任务,例如审核和控制数据库 操作。
功能
适用对象 每个表或视图 可用的数量 级联引用
执行时机
执行顺序
在inserted表和deleted 表引用text、ntext和 image类型的数据
1
2
1
2004-10-15 1301
2
2
1
2004-10-16 1302
3
5
2
2004-10-26 1303
4
6
1
2005-3-20 1301
5 7 222 2005-1-3 1301
inserted表
销售 编号
商品 编号
数量
售出时间
55 77 222 22000055--11--33
售货员 工编号
6
040101
7
040102
2
88
NULL
92
NULL
85
NULL
88
NULL
73
NULL
Delete form t_score where S_number='040102'
deleted表
S_number C_number Score credit
040102
2
73
NULL
【例1】 创建一个简单的DML替代触发器,当有
after 触发器
instead of触发器
表
表和视图
允许每个动作有 多个触发器
每个动作(update、delete 和insert)一个触发器
没有限制
在作为级联引用完整性约束 目标的表上限制应用
声明引用动作之后
在约束处理之前,代替了触 发动作
在创建inserted表和 在inserted表和deleted表创 deleted表触发时 建之后
DELETE FROM BorrowList
WHERE 图书编号 in (select图书编号 from deleted)
END
--测试触发器 Delete Form BookInfo
WHERE 图书编号=‘1008-2352’
消息如下:
* 行受影响
【例3】创建一个AFTER INSERT触发器,当在 ReaderCard表中插入一条新记录时,如果卡类型 不是“Student、Teacher、Worker、Manager或 other”时,则撤销该插入操作,并返回出错消 息。
【例11.1】创建一个简单的DML触发器,当读者完成借书 手续后,系统中的库存数量要及时更新。
图11.1 新建触发器图
11.2 新建触发器模板
图11.3 “指定模板参数的值”对话框 图 11.4 触发器代码
11.2.2 修改触发器
图11.5 修改触发器
图11.6 “修改触发器代码”窗口
11.2.3 删除触发器
第11章 触发器
11.1
触发器简介
11.2
界面中创建和使用触发器
11.3
用代码创建和使用触发器
与存储过程类似,触发器也是SQL 语句 集,两者惟一的区别是触发器不能用 EXECUTE 语句调用,而是在用户执行 Transact-SQL 语句时自动触发(激活)执 行,所以我们触发器就是一种特殊的存储过 程。
rollback transaction --返回用户定义的错误信息,事务回滚
print '不能插入不合法类型!' end
--测试触发器
insert into ReaderCard values (‘12121212’,‘章一', ‘男’,‘1985-8-8’,‘2003-9-9’,‘正常’,‘卡类型')