SQL触发器
触发器是指,当在指定的表上发生一个特定的操作事件时,将被调用的一个程序段。这个特定的操作事件也叫触发事件。当触发器所在的表有触发事件产生时,数据库服务器可不必考虑当前用户是谁而直接执行触发器程序。
触发器定义语句的主要组成部分如下:
触发器名;
触发器所在的表的名称;
触发动作时间;
触发事件;
触发事件的列清单;
执行语句
编写一触发器时时检测USER表,当用户在线状态“State”由“在线”改变“离线”, 在MESSAGE表时插入一条记录
==============================
IF OBJECT_ID('USER') IS NOT NULL DROP TABLE
IF OBJECT_ID('MESSAGE') IS NOT NULL DROP TABLE
IF OBJECT_ID('TIG_USER') IS NOT NULL DROP TRIGGER TIG_USER
GO
CREATE TABLE (
ID INT,
VARCHAR(50),
STATE VARCHAR(10),
CREATETIME DATETIME
)
INSERT INTO
SELECT 1 ,'qxm','离线','2009-09-14 10:46:33' UNION ALL
SELECT 2 ,'ljh','在线','2009-09-14 10:48:34' UNION ALL
SELECT 3 ,'wfd','在线','2009-09-14 10:49:35'
CREATE TABLE (
ID INT,
VARCHAR(50),
SENDTIME DATETIME
)
GO
CREATE TRIGGER TIG_USER
ON
AFTER UPDATE
AS
IF UPDATE(STATE)
INSERT SELECT D.id,D.NAME,D.CREATETIME
FROM INSERTED I INNER JOIN DELETED D
ON I.ID=D.ID AND I.STATE='离线' AND D.STATE='在线'
GO
UPDATE SET STATE='离线'
SELECT * FROM
/*
3 wfd 2009-09-14 11:07:13.980
2 ljh 2009-09-14 11:07:13.980
*/