在 SQL Server 2012 中可以创建 DML、DDL 或登录触发器。 触发器是数据库服务器中发生事件时自动执行的特种存储过程。 DML 事件是针对表或视图的 INSERT、UPDATE 或 DELETE 语句。
下面以常见论坛中用户注册成功时,系统自动发送欢迎消息为例讲解DML触发器的使用实例
--数据表结构
--用户表:(id,loginName,username,pwd,......)
--消息表:(id,toUser,title,body,pubTime)
--创建用户表
create table Users
(
id int primary key identity(1,1),
loginName varchar(20) not null,
username nvarchar(20) not null,
pwd char(32) not null
)
--创建消息表
create table Msgs
(
id int primary key identity(1,1),
ToUser int not null references Users(id),
title nvarchar(100) not null,
body nvarchar(1000) not null,
pubTime datetime default getdate()
)
--创建触发器前往“用户表”中添加一个新用户
insert into Users values('www.hyqhrj.com','衡阳软件教育','3128250');
select * from Users
select * from Msgs
--查看两个表的记录,只有“用户表”中成功添加一条记录
go
--创建触发器
create trigger Users_SendMessage
on users
after insert
as
declare @userId int;
declare @username nvarchar(20);
select @userId=id,@username=username from inserted
insert into msgs (ToUser,title,body)
values(@userId,'系统消息',concat(@username,':您好!欢迎使用.....'))
go
--创建触发器后,再次尝试往“用户表”中添加一条记录
insert into Users values('hyqhrj','衡阳清华IT','3128250');
select * from Users
select * from Msgs
--查看结果,当成功添加一个用户后,触发器自动执行,会在“消息表”中添加一条发给新用户的欢迎消息
--启用、禁用触发器
disable trigger all on users
go
enable trigger all on users