触发器摘录

INSTEAD OF 触发器用来代替一般的触发动做,即当对表进行INSERT、UPDATE 或 DELETE 操做时,系统不是直接对表执行这些操做,而是把操做内容交给触发器,让触发器检查所进行的操做是否正确。如正确才进行相应的操做。所以,INSTEAD OF 触发器的动做要早于表的约束处理。
INSTEAD OF 触发器的操做有点相似于完整性约束。在对数据库的操纵时,有些状况下使用约束能够达到更好的效果,而若是采用触发器,则能定义比完整性约束更加复杂的约束。有关触发器与约束的比较,请参见联机丛书。
INSTEAD OF 触发器不只可在表上定义,还可在带有一个或多个基表的视图上定义,但在做为级联引用完整性约束目标的表上限制应用。
AFTER 触发器定义了对表执行了 INSERT、UPDATE 或 DELETE 语句操做以后再执行的操做。好比对某个表中的数据进行了更新操做后,要求当即对相关的表进行指定的操做,这时就能够采用 AFTER 触发器。AFTER 触发器只能在表上指定,且动做晚于约束处理。
每个表上只能建立一个 INSTEAD OF 触发器,但能够建立多个 AFTER 触发器。
实例:
INSTEAD OF 触发器:
向表“计0261”插入数据时,检查学号是否存在于表“计026”中,如存在则进行插入操做,不然就不插入。
SQL code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TRIGGER [checkid] ON [dbo].[计0261] 
INSTEAD OF insert
AS
IF NOT EXISTS(SELECT * FROM 计026 WHERE 学号=(SELECT 学号 FROM INSERTED))
  BEGIN
    ROLLBACK TRANSACTION
    PRINT '要处理记录的学号不存在!'
  END
ELSE
  BEGIN
    INSERT INTO 计0261 select * from inserted
    PRINT '已经成功处理记录!'
  END

AFTER 触发器:
对定货表设置 AFTER(FOR) 类型的 INSERT 触发器,用来在插入记录时自动将统计值计算到定货统计表中。
SQL code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TRIGGER [orderinsert] ON [dbo].[定货表]
AFTER INSERT
AS
DECLARE @bookid int, @ordernum int, @num int
SELECT @bookid = 书籍编号, @ordernum = 数量 FROM INSERTED
SELECT @num = count(书籍编号) FROM 定货统计表 WHERE 书籍编号=@bookid
IF @num = 0
  --未找到该书,插入记录
  INSERT INTO 定货统计表 VALUES(@bookid, @ordernum)
ELSE
  --找到该书,更新记录
  UPDATE 定货统计表
SET 总定货量 = 总定货量 + @ordernum WHERE 书籍编号 = @bookid
地址:http://bbs.csdn.net/topics/300074591
相关文章
相关标签/搜索