求高手写一个触发器。

sgyiliya 2013-11-25 12:41:18
有两张表Test1和Test2:
Test1
ffid ffno note

Test2
wwid wwno bak


现在要写两个触发器,一个是insert触发器,一个是delete触发器。
insert触发器的要求是,
Test1有任意一条记录或者多条记录插入时,自动把Test1的ffid写入Test2的wwid,以及把
Test1的ffno写入Test2的wwno,至于的Test2的bak字段的值不要动。

delete触发器的要求是,
Test1有任意一条记录或者多条记录删除时,自动把Test2的wwid等于Test1表的ffid的记录删除。

备注,现在Test1和Test2都在同一个库里面。今后可能不在同一个库里面,最好把不在同一个库里面
的情况的触发器也写一下。


谢谢大侠们!
...全文
227 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
好帅的一条鱼 2013-11-25
  • 打赏
  • 举报
回复
打酱油来了
LongRui888 2013-11-25
  • 打赏
  • 举报
回复
给你写了一个,你可以参考一下哈:
create table test1(ffid int,ffno varchar(20),  note varchar(30))



create table Test2(wwid int,wwno varchar(20),  bak varchar(30))


create trigger dbo.trigger_test1_insert
on test1
for insert 
as

insert into Test2(wwid,wwno)
select ffid,ffno
from inserted
go


create trigger dbo.trigger_test1_delete
on test1
for delete 
as

delete Test2
from deleted d
where d.ffid = Test2.wwid
go


--1.插入
insert into test1
values(1,'aaa','xxx')

--数据也插入到了test2
select *
from Test2
/*
wwid	wwno	bak
1	    aaa	    NULL
*/

--2.删除
delete from test1 where ffid = 1


--发现已经被删掉了
select *
from Test2
/*
wwid	wwno	bak
*/
  • 打赏
  • 举报
回复
引用 2 楼 sgyiliya 的回复:
[quote=引用 1 楼 TravyLee 的回复:] 写个存储过程吧,建议不要用触发器。而且触发器你也不会写,存储过程实现这个需求应该简单吧,你会写吧
不同意您的意见。存储过程我也不会写。而且触发器还是很有用的。[/quote] 你只想着好用,就不想想不好维护的时候么?是不是做好了交差了就没你的事了哦!
sgyiliya 2013-11-25
  • 打赏
  • 举报
回复
引用 1 楼 TravyLee 的回复:
写个存储过程吧,建议不要用触发器。而且触发器你也不会写,存储过程实现这个需求应该简单吧,你会写吧
不同意您的意见。存储过程我也不会写。而且触发器还是很有用的。
  • 打赏
  • 举报
回复
写个存储过程吧,建议不要用触发器。而且触发器你也不会写,存储过程实现这个需求应该简单吧,你会写吧
LongRui888 2013-11-25
  • 打赏
  • 举报
回复
引用 12 楼 sgyiliya 的回复:
[quote=引用 7 楼 yupeigu 的回复:] [quote=引用 6 楼 sgyiliya 的回复:] [quote=引用 4 楼 yupeigu 的回复:] 给你写了一个,你可以参考一下哈: [/code]
好的,谢谢大侠。我倒是真不明白为什么触发器就不好维护了。 [/quote] 因为触发器是一种比较隐含的处理方式,不是像存储过程那样明显,所以如果不注意,就容易弄错。 这个只要子在文档中进行维护,记录一下,就好维护了。[/quote]
引用 10 楼 TravyLee 的回复:
要是仅仅为了你那50技术分,看到帖子马上就给你贴上代码了,没必要跟你争论这些。 所以,楼猪慎重选择。如果项目是你在维护还好,换做其他人,到时候出问题了很麻烦的
引用 8 楼 DBA_Huangzj 的回复:
2000和2005触发的回滚机制不同,这是其一。 跨库操作权限控制比较不好弄,这是其二。 大容量操作触发器不及存储过程,这是其三。 数据库脚本迁移的时候,存储过程比较容易,特别是有些DDL触发器,另外,在2005以上,触发器要在表那里看,在【可编程性】那里找不到。
好的,谢谢几位大侠,不过这倒是正好符合了我的私心啊。 呵呵,我就想着我自己写自己维护,因我在国企,所以......[/quote] 呵呵,原来如此
sgyiliya 2013-11-25
  • 打赏
  • 举报
回复
引用 13 楼 DBA_Huangzj 的回复:
那就做好维护文档,不然库越大越难管理
好的。谢谢您。
發糞塗牆 2013-11-25
  • 打赏
  • 举报
回复
那就做好维护文档,不然库越大越难管理
sgyiliya 2013-11-25
  • 打赏
  • 举报
回复
引用 7 楼 yupeigu 的回复:
[quote=引用 6 楼 sgyiliya 的回复:] [quote=引用 4 楼 yupeigu 的回复:] 给你写了一个,你可以参考一下哈: [/code]
好的,谢谢大侠。我倒是真不明白为什么触发器就不好维护了。 [/quote] 因为触发器是一种比较隐含的处理方式,不是像存储过程那样明显,所以如果不注意,就容易弄错。 这个只要子在文档中进行维护,记录一下,就好维护了。[/quote]
引用 10 楼 TravyLee 的回复:
要是仅仅为了你那50技术分,看到帖子马上就给你贴上代码了,没必要跟你争论这些。 所以,楼猪慎重选择。如果项目是你在维护还好,换做其他人,到时候出问题了很麻烦的
引用 8 楼 DBA_Huangzj 的回复:
2000和2005触发的回滚机制不同,这是其一。 跨库操作权限控制比较不好弄,这是其二。 大容量操作触发器不及存储过程,这是其三。 数据库脚本迁移的时候,存储过程比较容易,特别是有些DDL触发器,另外,在2005以上,触发器要在表那里看,在【可编程性】那里找不到。
好的,谢谢几位大侠,不过这倒是正好符合了我的私心啊。 呵呵,我就想着我自己写自己维护,因我在国企,所以......
  • 打赏
  • 举报
回复

use db1
go
if exists(select 1 from sys.triggers where name ='tr_test')
drop trigger tr_test
go
create trigger tr_test
on tb1
for insert,delete
as
if exists(select 1 from inserted) and not exists(select 1 from deleted)--插入操作
begin
	insert db2..tb2
	select .... from db1..tb1
end
if exists(select 1 from deleted) and not exists(select 1 from inserted)--如果删除操作
begin
	delete from db2..tb2 where exists(select 1 from db1..tb1 where ....)
end
  • 打赏
  • 举报
回复
要是仅仅为了你那50技术分,看到帖子马上就给你贴上代码了,没必要跟你争论这些。 所以,楼猪慎重选择。如果项目是你在维护还好,换做其他人,到时候出问题了很麻烦的
  • 打赏
  • 举报
回复
跟你提出来了你不信,那有什么办法呢? 当然不是不能用触发器,而是要用的小心,能不用,则不用。 你写一个删除或者新增的触发器,那么假如别人偏要做一些无聊的操作。 把某一行的数据全都更新成null,你两个表的数据还会一致吗?全部为null跟delete了意义一样吧? 这当然是个比喻。用除法器 特别是delete的,一定要想好,这样的触发器只有在delete操作的时候才会被触发。
發糞塗牆 2013-11-25
  • 打赏
  • 举报
回复
2000和2005触发的回滚机制不同,这是其一。 跨库操作权限控制比较不好弄,这是其二。 大容量操作触发器不及存储过程,这是其三。 数据库脚本迁移的时候,存储过程比较容易,特别是有些DDL触发器,另外,在2005以上,触发器要在表那里看,在【可编程性】那里找不到。
LongRui888 2013-11-25
  • 打赏
  • 举报
回复
引用 6 楼 sgyiliya 的回复:
[quote=引用 4 楼 yupeigu 的回复:] 给你写了一个,你可以参考一下哈: [/code]
好的,谢谢大侠。我倒是真不明白为什么触发器就不好维护了。 [/quote] 因为触发器是一种比较隐含的处理方式,不是像存储过程那样明显,所以如果不注意,就容易弄错。 这个只要子在文档中进行维护,记录一下,就好维护了。
sgyiliya 2013-11-25
  • 打赏
  • 举报
回复
引用 4 楼 yupeigu 的回复:
给你写了一个,你可以参考一下哈: [/code]
好的,谢谢大侠。我倒是真不明白为什么触发器就不好维护了。

34,590

社区成员

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

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