数据库层事件主要包含:
DDL Table events: Create table, Alter table, Drop table DDL view events : Create view, Alter view, Drop view DDL trigger events :Create trigger, Drop trigger, Alter trigger DDL synonym events: Create synonym, drop synonym DDL Index events: Create index, Alter index, Drop Index DDL Database level security events: Create User, Drop user, Alter user Create role, Drop role, Alter role Create application role, Drop application role, Alter Application role Create Schema, Drop Schema, Alter Schema Grant database access, Revoke database access, Deny Database access DDL Service broker events: Create Message type, Alter Message type, Drop Message type Create contract, Drop contract, Alter contract Create Service, Alter service, Drop Service Create route, Drop route, Alter route
服务器层事件主要包含:
Create Database, Drop Database Create Login, Drop Login, Alter Login
触发器和事务的故事
在前面的几个例子中,如DML触发器例子,Insert 语句执行后,因为触发器操作 或 Check处理错误,没有把数据真正的插入到表Contact中。其实,当执行触发器时,触发器的操作好像有一个未完成的事务在起作用。 通过几个例子来讲解触发器和事务的故事。
创建一个表ContactHIST,用于对表Contact作Update Or Delete操作时,把操作前的数据Insert到表ContactHIST中。
use tempdb
Go
if object_id(‘ContactHIST’) Is Not null
Drop Table ContactHIST
Go
Create Table ContactHIST
(
ID int Primary Key Identity(1,1),
ContactID int,
Name nvarchar(50),
Sex nchar(2),
ActionType nvarchar(10) Check(ActionType In(‘Update’,’Delete’)),
LastUpdateDate datetime Default(getdate())
)
Go
修改触发器tr_Contact内容,
use tempdb
Go
If Exists(Select 1 From sys.triggers Where name=’tr_Contact’)
Drop Trigger tr_Contact
Go
Create Trigger tr_Contact On Contact After Update,Delete
As
Insert Into ContactHIST(ContactID,Name,Sex)
Select ID,Name,Sex From deleted
Rollback Tran
Begin Tran
Go
测试数据,
use tempdb
Go
Insert Into Contact (Name,Sex) Values (‘Bill’,’F’)
Go
–Update
Update Contact
Set Sex=’M’
Where Name=’Bill’
Go
Select * From Contact
Select * From ContactHIST
Go
测试结果:










