SQL Trigger 初学

SQL Trigger啊
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 03:24:25 楼主
现在有表A,B。
我想写个触发器,只要向A添加(Insert)就把A中部分字段放到B表中,同时B表也要有个触发器,如果向B表中插入数据中,B表中有重复的数据(是主键重复)就停止插入,否则(是主键值没有重复)就一直插入直到完成。
请问,这两个触发器怎么写?谢谢各位高手!大哥哥,大姐姐,大嫂嫂,大妹妹,大·····帮帮忙!小弟学触发器不长,资源共享下,谢谢!

A(A1,A2,A3,A4,A5)
B(A1,A2,B3,B4,A5)
B1,B2B5

因为B1=A1字段名称相同。B2同理
CreateTriggerInsertTriggerONA
FORINSERT....
后面不会了~~~~~
问题点数:100回复次数:19 显示所有回复显示星级回复显示楼主回复修改 删除 举报 引用 回复
<iframe id="Topic_Zone" style="HEIGHT: 4px" marginwidth="0" marginheight="0" src="/u/AD/Topic_Zone.aspx" frameborder="0" width="100%" scrolling="no" height="0"></iframe>
进入用户个人空间
加为好友
发送私信
在线聊天
  • kelph
  • 坐看云起
  • 等级:
发表于:2008-04-12 08:33:461楼得分:0
SQL code
 
          
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> -- 假设b1为主键 insert b(B1,B2) select A1,A2 from inserted i where not exists ( select 1 from i,b where b.b1 = i.a1)
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 08:37:222楼得分:0
大哥,麻烦写完整代码,你写这点点,我知道是怎么回事啊,晕,早知就说我一点都不会写好了。
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 08:44:563楼得分:0
SQL code
 
          
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> create table a (a1 int ,a2 int ,a3 int ,a4 int ,a5 int ) create table b (b1 int ,b2 int ,b3 int ,b4 int ,b5 int ) create trigger trigger_a on a for insert as begin insert into b(b1,b2,b5) select a1,a2,a5 from inserted i where not exists ( select 1 from b where b1 = i.a1 ) end insert into a select 1 , 2 , 3 , 4 , 5 insert into a select 1 , 1 , 1 , 1 , 1 select * from a select * from b


--a表
a1 a2 a3 a4 a5
1 2 3 4 5
1 1 1 1 1

--b表

b1 b2 b3 b4 b5
1 2 NULL NULL 5


<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 08:48:264楼得分:0
对吗?
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 08:49:455楼得分:0
SQL code
 
          
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> Create Trigger InsertTrigger ON A FOR INSERT AS SET NOCOUNT ON INSERT INTO B(B1,B2,B5) SELECT A1,A2,A5 FROM INSERTED SET NOCOUNT OFF GO -- > B表不需要触发器:B表的主键去掉,改为唯一性索引,忽略重复键。
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 08:50:276楼得分:0
只要向A添加(Insert)就把A中部分字段放到B表中,同时B表也要有个触发器,如果向B表中插入数据中,B表中有重复的数据(是主键重复)就停止插入,否则(是主键值没有重复)就一直插入直到完成。
---------
其实只在A上做触发器即可,先判断一下,只插入在B中没有的数据.
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 09:03:257楼得分:0
http://blog.csdn.net/Haiwer/archive/2007/07/30/1717206.aspx
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 09:08:448楼得分:0
SQL code
 
          
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> -- 在A上建一个触发器就行了。。插入时判断B中是否存在,存在就不插入了。不存在才插入。 create trigger trigger_a on a for insert as insert into b(b1,b2,b5) select a1,a2,a5 from inserted i where not exists ( select 1 from b where b1 = i.a1)
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 09:12:099楼得分:0
***************************************************************************


*****************************************************************************
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 13:01:4110楼得分:0
楼上的答案已经足以!
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 14:50:2011楼得分:0
引用 2 楼 yinhonghai 的回复:
大哥,麻烦写完整代码,你写这点点,我知道是怎么回事啊,晕,早知就说我一点都不会写好了。

笑死我了...呵呵...楼主向你学习...
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 16:26:0312楼得分:0
luguo...
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 17:02:0813楼得分:0
别向我学习,我可是连菜鸟都算不上
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 17:03:3514楼得分:0
感谢大家对我的帮助和支持!问题解决了。我的分数也增加了
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 17:28:3615楼得分:0
我的分数也增加了?
=================
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 18:18:4916楼得分:0
我的知识增加了,考试分数也增加了
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 20:51:2117楼得分:0
第二个触发器应用insteadof
SQL code
 
          
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> create trigger trigI_B on B instead of insert as -- 假设B表主键为B1 if not exists ( select * from B,inserted where b.b1 = inserted.b1) insert into b (b1,b2,b3,b4,b5) select b1,b2,b3,b4,b5 from inserted
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 23:09:3918楼得分:0
现在有表A,B。
我想写个触发器,只要向A添加(Insert)就把A中部分字段放到B表中,同时B表也要有个触发器,如果向B表中插入数据中,B表中有重复的数据(是主键重复)就停止插入,否则(是主键值没有重复)就一直插入直到完成。
请问,这两个触发器怎么写?谢谢各位高手!大哥哥,大姐姐,大嫂嫂,大妹妹,大·····帮帮忙!小弟学触发器不长,资源共享下,谢谢!
A(A1,A2,A3,A4,A5)
B(A1,A2,B3,B4,A5)

createtriggretr_A_insert
onA
forinsert
as
begin
insertintoBselect字段1,字段2,字段3frominserted
---注意,这里最好是将要插入到表B中的字段名称都写出来,有可能两个表有自增列
end

createtriggertr_B_insert
onB
insteadinsert
as
begin
declare@字段1类型,@字段2类型,@字段3类型...
declarecur_bcursorforselect字段1,字段2,字段3...frominserted
opencur_b
fetchnextfromcur_binto@字段1,@字段2,@字段3...
while(@@fetch_status=0)
begin
declare@chongfuint
set@chongfu=0
select@chongfu=count(1)fromBbwhereb.字段1=@字段1andb.字段2=@字段..
if(@chongfu>0)
insertintoBselect@字段1,@字段2,@字段3...
fetchnextfromcur_binto@字段1,@字段2,@字段3...
end
closecur_b
deallocatecur_b
end

随写,try去吧
<!-- <span>预留的文字链广告位</span> //-->修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
发表于:2008-04-12 23:13:4519楼得分:0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值