什么时候用触发器

icedut 2003-11-03 04:24:43
我没用过触发器,
我想知道什么时候用触发器会比较好
请大家介绍一下
...全文
2409 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
icedut 2003-11-03
  • 打赏
  • 举报
回复
:(
icedut 2003-11-03
  • 打赏
  • 举报
回复
txlicenhe(马可)
你的那些我看过了

我只是不清楚什么时候更适合用触发器
icedut 2003-11-03
  • 打赏
  • 举报
回复
补充一下
最近到没发现上面的问题
(vb)我用了on error resume next替换原来的 on error goto exiterror

txlicenhe 2003-11-03
  • 打赏
  • 举报
回复
触发器
Microsoft® SQL Server™ 2000 触发器是一类特殊的存储过程,被定义为在对表或视图发出 UPDATE、INSERT 或 DELETE 语句时自动执行。触发器是功能强大的工具,使每个站点可以在有数据修改时自动强制执行其业务规则。触发器可以扩展 SQL Server 约束、默认值和规则的完整性检查逻辑,但只要约束和默认值提供了全部所需的功能,就应使用约束和默认值。

表可以有多个触发器。CREATE TRIGGER 语句可以与 FOR UPDATE、FOR INSERT 或 FOR DELETE 子句一起使用,指定触发器专门用于特定类型的数据修改操作。当指定 FOR UPDATE 时,可以使用 IF UPDATE (column_name) 子句,指定触发器专门用于具体某列的更新。

触发器可使公司的处理任务自动进行。在库存系统内,更新触发器可以检测什么时侯库存下降到了需要再进货的量,并自动生成给供货商的定单。在记录工厂加工过程的数据库内,当某个加工过程超过所定义的安全限制时,触发器会给操作员发电子邮件或寻呼。

无论何时只要有新的标题添加到 pubs 数据库中,下面的触发器就会生成电子邮件:

CREATE TRIGGER reminder
ON titles
FOR INSERT
AS
EXEC master..xp_sendmail 'MaryM',
'New title, mention in the next report to distributors.'

触发器包含 Transact-SQL 语句,这与存储过程十分相似。与存储过程一样,触发器也返回由触发器内的 SELECT 语句生成的结果集。不建议在触发器中包含 SELECT 语句,但仅填充参数的语句除外。这是因为用户不期望看到由 UPDATE、INSERT 或 DELETE 语句返回的结果集。

可使用 FOR 子句指定触发器的执行时间:

AFTER
触发器在触发它们的语句完成后执行。如果该语句因错误(如违反约束或语法错误)而失败,触发器将不会执行。不能为视图指定 AFTER 触发器,只能为表指定该触发器。可以为每个触发操作(INSERT、UPDATE 或 DELETE)指定多个 AFTER 触发器。如果表有多个 AFTER 触发器,可使用 sp_settriggerorder 定义哪个 AFTER 触发器最先激发,哪个最后激发。除第一个和最后一个触发器外,所有其它的 AFTER 触发器的激发顺序不确定,并且无法控制。

在 SQL Server 2000 中 AFTER 是默认触发器。不能在 SQL Server 7.0 版或更早的版本中指定 AFTER 或 INSTEAD OF,这些版本中的所有触发器都作为 AFTER 触发器运行。

INSTEAD OF
该触发器代替触发操作执行。可在表和视图上指定 INSTEAD OF 触发器。只能为每个触发操作(INSERT、UPDATE 和 DELETE)定义一个 INSTEAD OF 触发器。INSTEAD OF 触发器可用于对 INSERT 和 UPDATE 语句中提供的数据值执行增强的完整性检查。INSTEAD OF 触发器还允许指定某些操作,使一般不支持更新的视图可以被更新。


请参见

用触发器强制执行业务规则

©1988-2000 Microsoft Corporation。保留所有权利。
icedut 2003-11-03
  • 打赏
  • 举报
回复
相同数据库,不同结构的表
t1,t2
t1添加数据时,t2也需要添加一条数据。t1,t2表结构完全不同
t1,t2的数据都是从界面输入的数据。

这样的炒作不是合用触发器吧

我遇到一个这样的问题
t1中加入了记录,t2中却没有加入记录(这种情况是我查到的,但是当时是什么出错情况,我不清楚,我象可能是出错退出了)
我怎样能实现要是插入,就全部插入,否则都不插入
pengdali 2003-11-03
  • 打赏
  • 举报
回复
同步两个不同数据库相同结构的表:

CREATE TRIGGER 名1 ON dbo.tabMain
FOR INSERT
AS
insert db2..tabSlave select * from inserted
go

CREATE TRIGGER 名2 ON dbo.tabMain
FOR update
AS
update db2..tabSlave set 列=aa.列 from inserted aa where aa.编号=db2..tabSlave.编号
go

CREATE TRIGGER 名3 ON dbo.tabMain
FOR delete
AS
delete db2..tabSlave where 编号 in (select 编号 from deleted)

34,664

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧