求触发器,简单----偶是来学习并赠分D~~~~~

emoam 2003-07-25 11:12:21

我对SqlServer2000不熟,触发器不知道怎么写

我想请哪位大虾帮我一把,教我怎么写触发器
情况(1):
当我更新表tab_accept的IDcard字段时,要求能够修改表tab_Career中的IDcard字段

情况(2):
当我删除表tab_accept的一条记录时,要求能删除tab_Career中记录,条件为tab_accept.IDcard = tab_Career.IDcard

简单吧?呵呵,哪位帮帮我,要有详细的注释哦

长期向大家学习,长期贡献专家分!

发到我邮箱,emoam@163.com
然后跟贴,偶搞定就给分!
...全文
36 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2003-07-25
  • 打赏
  • 举报
回复
情况(2):
当我删除表tab_accept的一条记录时,要求能删除tab_Career中记录,条件为tab_accept.IDcard = tab_Career.IDcard

create trigger aa on tab_accept --在表tab_accept上创建名为aa的触发器
for delete --删除记录时触发
as
delete tab_Career where IDcard in (select IDcard from deleted) --从deleted表中获得删除的IDcard

zjcxc 2003-07-25
  • 打赏
  • 举报
回复
按错了键,补充如下:

情况(1):
当我更新表tab_accept的IDcard字段时,要求能够修改表tab_Career中的IDcard字段

create trigger aa on tab_accept --在表tab_accept上创建名为aa的触发器
for insert --新增记录时触发
as
update tab_Career set IDcard=b.IDcard --根据新增的记录来更新
from tab_Career a, inserted b where a.id=b.id --两者之间相关联和主键
zjcxc 2003-07-25
  • 打赏
  • 举报
回复
情况(1):
当我更新表tab_accept的IDcard字段时,要求能够修改表tab_Career中的IDcard字段

create trigger aa on tab_accept --在表tab_accept上创建名为aa的触发器


情况(2):
当我删除表tab_accept的一条记录时,要求能删除tab_Career中记录,条件为tab_accept.IDcard = tab_Career.IDcard
CrazyFor 2003-07-25
  • 打赏
  • 举报
回复
12.5 触发器概述
在上面几节我们介绍了一般意义的存储过程即用户自定义的存储过程和系统存储过
程本节将介绍一种特殊的存储过程即触发器在余下各节中我们将对触发器的概念
作用以及对其的使用方法作详尽介绍使读者了解如何定义触发器创建和使用各种不同
复杂程度的触发器
12.5.1 触发器的概念及作用
触发器是一种特殊类型的存储过程它不同于我们前面介绍过的存储过程触发器主
要是通过事件进行触发而被执行的而存储过程可以通过存储过程名字而被直接调用当
对某一表进行诸如UPDATE INSERT DELETE 这些操作时SQL Server 就会自动执行
触发器所定义的SQL 语句从而确保对数据的处理必须符合由这些SQL 语句所定义的规

触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数
据的一致性除此之外触发器还有其它许多不同的功能
1 强化约束Enforce restriction
触发器能够实现比CHECK 语句更为复杂的约束
2 跟踪变化Auditing changes
触发器可以侦测数据库内的操作从而不允许数据库中未经许可的指定更新和变化
3 级联运行Cascaded operation
触发器可以侦测数据库内的操作并自动地级联影响整个数据库的各项内容例如
某个表上的触发器中包含有对另外一个表的数据操作如删除更新插入而该操作
又导致该表上触发器被触发
4 存储过程的调用Stored procedure invocation
为了响应数据库更新触发器可以调用一个或多个存储过程甚至可以通过外部过程
的调用而在DBMS 数据库管理系统本身之外进行操作
由此可见触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等
一些方面的问题例如触发器能够找出某一表在数据修改前后状态发生的差异并根据
这种差异执行一定的处理此外一个表的同一类型INSERT UPDATE DELETE 的
多个触发器能够对同一种数据操作采取多种不同的处理
总体而言触发器性能通常比较低当运行触发器时系统处理的大部分时间花费在
参照其它表的这一处理上因为这些表既不在内存中也不在数据库设备上而删除表和插
入表总是位于内存中可见触发器所参照的其它表的位置决定了操作要花费的时间长短
12.5.2 触发器的种类
SQL Server 2000 支持两种类型的触发器AFTER 触发器和INSTEAD OF 触发器其
中AFTER 触发器即为SQL Server 2000 版本以前所介绍的触发器该类型触发器要求只
有执行某一操作INSERT UPDATE DELETE 之后触发器才被触发且只能在表
上定义可以为针对表的同一操作定义多个触发器对于AFTER 触发器可以定义哪一
个触发器被最先触发哪一个被最后触发通常使用系统过程sp_settriggerorder 来完成此
任务
INSTEAD OF 触发器表示并不执行其所定义的操作INSERT UPDATE DELETE
而仅是执行触发器本身既可在表上定义INSTEAD OF 触发器也可以在视图上定义
INSTEAD OF 触发器但对同一操作只能定义一个INSTEAD OF 触发器
emoam 2003-07-25
  • 打赏
  • 举报
回复

before与after问题在SQLSERVER 中不存在吧?以前写ORACLE时有

TaoGeGe 2003-07-25
  • 打赏
  • 举报
回复
分為前觸發和後觸發兩種
是一個特殊的存儲過程
97866 2003-07-25
  • 打赏
  • 举报
回复
Create Trigger Trg_Name on tab_accept for update,delete
as
if Update(IDcard)
update tab_career set IDcard=b.IDcard from tab_career a,inserted b
where 条件
delete tab_career where idcard in (select idcard from deleted)
and (Not exists(select * from inserted))
start1127 2003-07-25
  • 打赏
  • 举报
回复
看看语法和例子,很快就会了
nboys 2003-07-25
  • 打赏
  • 举报
回复
情况(1):
当我更新表tab_accept的IDcard字段时,要求能够修改表tab_Career中的IDcard字段
情况(2):
当我删除表tab_accept的一条记录时,要求能删除tab_Career中记录,条件为tab_accept.IDcard = tab_Career.IDcard

create trigger t_test on tab_accept
for update,delete
as
begin
if update(IDcard)
update tab_Career set IDcard=a.IDcard from inserted a join tab_Career b on
b.IDcard=a.IDcard
delete from tab_Career where IDcard (select IDcard from deleted)
end
liuyun2003 2003-07-25
  • 打赏
  • 举报
回复
create trigger tri_1 on tab_accept for update,delete
as
if exists(select * from inserted)
begin
update tab_career set IDcard=inserted.IDcard from tab_career,inserted where 条件(注即表tab_accept和tab_career相关联的条件)
end
else
begin
delete tab_career where idcard in (select idcard from deleted)
end

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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