触发器(Trigger)(三)

转载 2007年09月20日 08:55:00

 设计DML触发器的注意事项及技巧

在了解触发器的种类和工作理由之后,现在可以开始动手来设计触发器了,不过在动手之前,还有一些注意事项必须先了解一下:

 设计触发器的限制

在触发器中,有一些SQL语句是不能使用的,这些语句包括:

DML触发器中不能使用的语句

不能使用的语句

语句功能

Alter Database

修改数据库

Create Database

新建数据库

Drop Database

删除数据库

Load Database

导入数据库

Load Log

导入日志

Reconfigure

更新配置选项

Restore Database

还原数据库

Restore Log

还原数据库日志

另外,在对作为触发操作的目标的表或视图使用了下面的SQL语句时,不允许在DML触发器里再使用这些语句:

2 在目标表中使用过的,DML触发器不能再使用的语句

不能使用的语句

语句功能

Create Index

建立索引

Alter Index

修改索引

Drop Index

删除索引

DBCC Dbreindex

重新生成索引

Alter Partition Function

通过拆分或合并边界值更改分区

Drop Table

删除数据表

Alter Table

修改数据表结构

  如何在触发器取得字段修改前和修改后的数据

上面介绍过,SQL Server 2005在为每个触发器都定义了两个虚拟表,一个是插入表(inserted),一个是删除表(deleted),现在把这两个表存放的数据列表说明一下:

11.3  插入/删除表的功能

激活触发器的动作

Inserted

Deleted

Insert

存放要插入的记录

 

Update

存放要更新的记录

存放更新前的旧记录

Delete

 

存放要删除的旧记录

以上面删除库存产品记录为例,在删除时触发器要判断库存数量是否为零,那么判断就应该这么写:

If (Select 库存数量 From Deleted)>0

Begin

Print ‘库存数量大于零时不能删除此记录

Rollback Transaction

End

  其他注意事项

l  After触发器只能用于数据表中,Instead Of触发器可以用于数据表和视图上,但两种触发器都不可以建立在临时表上。

一个数据表可以有多个触发器,但是一个触发器只能对应一个表。

在同一个数据表中,对每个操作(如InsertUpdateDelete)而言可以建立许多个After触发器,但Instead Of触发器针对每个操作只有建立一个。

如果针对某个操作即设置了After触发器又设置了Instead Of触发器,那么Instead of触发器一定会激活,而After触发器就不一定会激活了。

l  Truncate Table语句虽然类似于Delete语句可以删除记录,但是它不能激活Delete类型的触发器。因为Truncate Table语句是不记入日志的。

l  WRITETEXT语句不能触发InsertUpdate型的触发器。

不同的SQL语句,可以触发同一个触发器,如InsertUpdate语句都可以激活同一个触发器。

 

trigger触发器和自定义方法

$(function () { var oTxt = $("input"); //trigger触发器,需要把事件放在自己的身上去触发事件;触发事件不需要用户...
  • younghaiqing
  • younghaiqing
  • 2016年10月21日 15:35
  • 698

Sybase触发器学习

这几日需要设计项目的几个报表统计模块,然后统计其数值。时间甚赶,需要新增一堆表,且以前的一个主表被修改并没有对应的log表,得重新设计。写log表要求使用触发器实现。   所以在网上查找半天syba...
  • qq_29663071
  • qq_29663071
  • 2016年07月15日 13:45
  • 265

oracle数据库触发器(trigger)用法总结

http://yedward.net/?id=116   触发器的意思就是当我们对数据库对象(一般是表或视图)进行insert、update、delete操作的时候,这些操作会相应的触发一些事件的...
  • zhanzhib
  • zhanzhib
  • 2015年09月25日 10:12
  • 10589

[oracle] 触发器使用教程和命名规范

触发器使用教程和命名规范       目  录   触发器使用教程和命名规范    1  1,触发器简介 1  2,触发器示例 2  3,触发器语法和功能  3  4,例一:行级触发器之一    4 ...
  • xys_777
  • xys_777
  • 2010年07月16日 01:04
  • 4303

android:SQLite--触发器详解

关于SQLite基础部分:SQLite基础学习 SQLite 的触发器是数据库的回调函数,它会自动执行/指定的数据库事件发生时调用。SQLite 的触发器可以指定在特定的数据库表发生 delet...
  • qq_17326933
  • qq_17326933
  • 2015年09月01日 21:24
  • 3313

Oracle Trigger 触发器

Oracle Trigger 在Oracle8i之前,只允许给予表或者视图的的DML的操作,而从Oracle8i开始,不仅可以支持DML触发器,也允许给予系统事件和DDL的操作. 一、触发器的分类...
  • bbliutao
  • bbliutao
  • 2012年08月06日 11:16
  • 1868

数据库(SQL)之trigger(触发器)的使用以及视图(view)的基本实现

对于触发器,首先需要明确的是一下几点: trigger_name 必须给触发器命令,最多64个字符,建议用表的名字_触发器类型的缩写方法命名。如ttlsa_posts_bi(表ttlsa_posts,...
  • u013816144
  • u013816144
  • 2015年12月05日 12:18
  • 1231

SQLite创建触发器 CREATE TRIGGER

CREATE TRIGGER sql-statement ::=CREATE[TEMP|TEMPORARY]TRIGGERtrigger-name[BEFORE|AFTER] database-ev...
  • L_serein
  • L_serein
  • 2012年11月09日 15:42
  • 4804

sqlite3触发器的使用

研究了一下osx下dock中应用的存储,位于~/Library/Application Support/Dock/下一个比较名字比较长的db文件中,之前简单的介绍过osx launchpad图标的删除...
  • dliyuedong
  • dliyuedong
  • 2014年10月29日 00:22
  • 10361

MySQL触发器Trigger实例篇

MySQL触发器Trigger实例篇 发表于668 天前 ⁄ IT技术 ⁄ 暂无评论 以前关注的数据存储过程不太懂其中奥妙,最近遇到跨数据库,同时对多个表进行CURD(Create...
  • hireboy
  • hireboy
  • 2014年01月10日 11:45
  • 29210
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:触发器(Trigger)(三)
举报原因:
原因补充:

(最多只允许输入30个字)