SQLServer中的触发器基本语法与作用


当前第2页 返回上一页

UPDATE 触发器创建触发的语法

CREATE TRIGGER trigger_name
ON table_name
[WITH ENCRYPTION]
FOR [DELETE, INSERT, UPDATE]
AS
T-SQL语句
GO

注意:WITH ENCRYPTION表示加密触发器定义的SQL文本 DELETE, INSERT, UPDATE指定触发器的类型 insert 触发器示例

/*创建insert触发器,在上网记录表recordInfo上创建插入触发器*/
create trigger tr_insert_recordInfo
on recordInfo
for insert
as
/*定义变量,用于临时存储插入的会员号、电脑编号和卡的编号*/
declare @cardId char()
declare @PCId int
declare @CardNumber char()
/*从inserted临时表中获取插入的记录行的信息,包括电脑的编号、卡的编号*/
select @PCId=PCId,@cardId=CardId from inserted
/*根据电脑编号修改电脑的使用状态*/
update PCInfo set PCUse= where PCId=@PCId
/*根据卡的编号查询会员号*/
select @CardNumber=CardNumber from cardinfo where CardId=@cardid
/*显示上机成功的信息*/
print '上机成功!会员号是:'+@CardNumber+'机器号是:'+convert(char(),@PCId)
go
----插入测试数据,会员号为的上机
set nocount on --不显示sql语句影响的记录行数
declare @CardId int ---声明一个存储卡的编号的变量
---根据会员号查处卡的编号
select @cardId=cardid from cardinfo where cardNumber='c' 
---向recordInfo表中插入一条记录信息,卡的编号、电脑编号和上机时间
insert into recordInfo(cardId,PCId,beginTime) values(@cardId,,getDate())
----查看结果
select * from recordInfo
select * from PCInfo

update触发器示例

---创建delete触发器,在上网记录表RecordInfo上创建删除触发器
create trigger tr_delete_recordInfo
on recordInfo
for delete
as
if exists(select * from sysobjects where name='backRecordInfo')
----如果backrecordInfo表存在,就添加记录即可
insert into backRecordInfo select * from deleted
else
----创建backRecordInfo表,从deleted中获取被删除的数据
select * into backRecordInfo from deleted
print'backRecordInfo表备份数据成功,备份表中的数据为:'
select * from backRecordInfo
go
-------关键代码------
----测试delete触发器,删除数据
set nocount on
delete from recordInfo
---查看结果
print'记录表中的数据为:'
select * from recordInfo

delete触发器示例

-------关键代码------
create trigger tr_update_recordInfo
on recordInfo
for update
as
declare @beforePCId int
declare @afterPCId int
select @beforePCId =PCId from deleted
select @afterPCId=PCID from inserted
---根据电脑编号修改使用状态-----
---根据以前使用的电脑编号把电脑的使用状态改为:
update PCInfo set PCUse= where PCId=@beforePCId
---根据现在使用的电脑编号把电脑的使用状态改为:
update PCInfo set PCUse= where PCId=@afterPCId
----显示电脑换机成功
print'换机成功!从'+convert(varchar(),@beforePCId)+'号电脑换到'+convert(varchar(),@afterPCId)+'号电脑'
go
/*测试update触发器,修改电脑编号*/
--显示更改前,记录表中的数据
print'更改前,记录表中的数据'
select * from recordInfo
--显示更改前,电脑表中的数据
print'更改前,电脑表中的数据'
select * from PCInfo
set nocount on
---把电脑号为的改为
update recordInfo set PCId= where PCId= 
---查看结果
print'更改后,记录表中的数据'
select * from recordInfo
print'更改后,电脑表中的数据'
select * from PCInfo

instead of触发器的使用 instead of触发器的使用范围,instead of 触发器可以同时在数据表和视图中使用。通常在以下几种情况下,建议使用instead of触发器: 数据库里的数据禁止修改:例如电信部门的通话记录是不能修改的,一旦修改,则通话费用的计数将不准确。 有可能要回滚修改的SQL语句 在视图中使用触发器 用自己的方式去修改数据 instead of触发器示例

---创建update触发器,在上网记录表recordInfo上创建修改(列)触发器
create trigger tr_updateColum1_recordInfo
on recordInfo
instead of insert
as
declare @cardbalance int --声明用于存储用户余额的变量
declare @CardId int --声明用于存储用户卡的编号的变量
declare @PCId int --声明用于存储电脑编号的变量
---inserted临时表中获取插入的记录行信息,包括电脑编号、卡的编号
select @cardId=cardId,@PCId=PCId from inserted
select @cardbalance=cardBalance from cardInfo where CardId=@CardId
print'您的余额为:'+convert(varchar(10),@cardBalance) ---打印余额信息
if(@cardBalance<2) ---判断余额多少,看能否正常上机
print'余额小于元,不能上机。请尽快充值!'
else
----根据电脑的编号修改电脑的使用状态更改为正在使用
update PCInfo set PCUse=1 where PCId=@PCId
----向recordInfo表插入上机记录
insert into recordInfo(cardId,PCId,beginTime)values(@CardId,@PCId,getdate())
print'上机成功'
-------关键代码------
set nocount on
declare @cardId int ---声明一个存储卡的编号的变量
---根据会员号查出卡的编号
select @cardId=cardId from cardInfo where cardNumber='c001'
----向recordInfo表中插入一条记录信息,卡的编号、电脑的编号和上机时间
insert into recordInfo(cardId,PCId,beginTime)values(@cardId,1,getdate())
select * from recordInfo
select * from PCInfo

以上所述是小编给大家介绍的SQLSever中的触发器基本语法与作用的相关内容,希望对大家有所帮助!


标签:SQL

返回前面的内容

相关阅读 >>

c#实现过滤sql特殊字符的方法集合

关于sql盲注语法

浅谈数据库优化方案

mysql怎么修改字段类型?

sql server中with as使用介绍

找到mysql的优点

sql server 2005安装实例环境图解第12页

浅析sql server的嵌套存储过程中使用同名的临时表怪像

c#数据库操作的示例详解

navicat连接sql server报错08001如何解决

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...