第10章 可编程对象(6)

--10.7.3 触发器
--触发器是一种特殊的存储过程,一种不能被显式执行,而必须依附于一个事件的过程。
--触发器有很多用途,包括审核数据,实施不能通过约束而实现的完整性规则,实施一
--定的策略,等等。
--在触发器的代码中执行rollback tran将会导致触发器内发生的所有更改,以及和触发器
--关联的事务中进行的所有更改都发生回滚。
--10.7.4 DML触发器
--两种DML触发器,AFTER与INSTEAD OF触发器。AFTER触发器是在与之关联的事件完成之后
--触发,只能在持久化的表上定义这种触发器。INSTEAD OF触发器的触发是为了代替与之关
--联的事件操作,可以在持久化的表或视图上定义这种类型的触发器。
--触发器可以访问成为inserted和deleted的两个表,它们包含导致触发器触发的修改操作而
--影响的记录行。对于INSTEAD OF 触发器,inserted和deleted表包含导致触发器触发的修
--改操作打算要影响的行。

use tempdb;
if OBJECT_ID('dbo.T1_Audit','U') is not null drop table dbo.T1.Audit;
if OBJECT_ID('dbo.T1','U') is not null drop table dbo.T1;

create table dbo.T1
(keycol int not null primary key,
datacol varchar(10) not null);

create table dbo.T1_Audit
(audit_lsn int not null identity primary key,
dt datetime not null default(current_timestamp),
login_name sysname not null default(suser_sname()),
keycol int not null,
datacol varchar(20) not null);
go

create trigger trg_T1_insert_audit on dbo.T1 after insert
as 
set nocount on
insert into dbo.t1_audit(keycol, datacol)
select keycol, datacol from inserted;
go

insert into dbo.T1(keycol, datacol) values(100,'a'),(300,'x'),(200,'g');

select * from dbo.T1_Audit;
go

--10.7.5 DDL触发器
--SQL Server支持AFTER类型的DDL触发器,而不支持before或instead of类型的ddl触发器。
--10.8 错误处理
--当使用TRY..CATCH结构时,通常是把T-SQL代码放在TRY块中(放在begin try和end try关键字之间),而把错误的代码放在紧接其后
--的CATCH块中(放在BEGIN CATCH和END CATCH关键字之间)。如果try块中的代码没有错误,SQL Server就会简单忽略catch块。如果
--TRY块发生了错误,流程控制就会转移到相应的CATCH块。
begin try
	print 10/2
	print 'no error'
end try
begin catch 
	print 'error'
end catch;

begin try
	print 10/0
	print 'no error'
end try
begin catch 
	print 'error'
end catch;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值