关于InterBase的触发器(100分)

  • 主题发起人 nutshell
  • 开始时间
N

nutshell

Unregistered / Unconfirmed
GUEST, unregistred user!
在InterBase中可以建BEFORE和AFTER两种触发器,并且可以直接用old和new引用被操作
的字段,不知道old和new在BEFORE和AFTER中分别指什么,还有如何在SQLServer中实现
BEFORE和AFTER触发器的类似功能,好像在InterBase的BEFORE的触发器中可以直接操作
触发器所在的表中的数据,比如一个字段要特别的处理,那么就可以在BEFORE中处理,
不知道在SQLServer中如何达到相同的功能。
请大家帮帮忙!
 
就是你希望你的这段程序在UPDATE,INSERT,DELETE 操作的前面执行呢(前触发)还是在
后面执行(后触发)。OLD和NEW是两个对象,它可以通过.fieldname的形式访问UPDATE时
记录在更新前和后的值,有利你做诸如完整性等的相关操作。SQL-SERVER也时一样的
 
可以的,用instead of触发器。
一般是在视图上创建instead of触发器。
如果在表上创建的话,该触发器将代替原来的操作(INSERT、UPDATE 或 DELETE),
比如:如果是instead of delete触发器,那么delete将不被执行,而是执行触发器中的脚本。
通过在视图上的instead of触发器,可以对视图中的基表进行插入删除操作。

以下是MS SQLSERVER 2000联机帮助中的原文,供你参考:
//--------------------------------------------------------------------
例如,可以定义 INSTEAD OF 触发器在一列或多列上执行错误或值的检查,
然后在插入记录之前执行其它操作 例如,当工资表中小时工资列的更新值超过指定值时,
可以定义触发器或者产生错误信息并回滚该事务,或者在审核日志中插入新记录(在工资表中插入该记录之前)。
有关更多信息,请参见设计 INSTEAD OF 触发器。

可以在表或视图上定义 INSTEAD OF 触发器;然而,INSTEAD OF 触发器对扩展视图能支持的更新类型最有用。
例如,INSTEAD OF 触发器能够提供逻辑以通过视图修改多个基表,或者修改包含以下列的基表:

timestamp 数据类型
计算列
标识列
 
to tinyint:
假设有如下更新语句:UPDATE tablename SET Field1=Value1,.......FieldN=ValueN
我在表tablename中有一个触发器检查Field10的值,如果不满足某条件(比如:
Field10>100)时,我要改为Field10=100,应该怎么写触发器

另外有个问题要问大家,在那种情况下触发器中使用了RAISERROR语句时需要回滚事务
RAISERROR不是会自动回滚事务吗,还是要错误级别达到一定的程度才会呢?
 
用AFTER触发器就可以了:
create trigger xxx on tablename
for update
as
update tablename set field10=100 from inserted i,tablename t
where i.关键字=t.关键字 and i.field10>100
 
顶部