ChinaUnix首页 > 精华文章 > Sybase > 正文

[精华] 用触发器还是存储过程比较好


http://www.chinaunix.net 作者:learningunix  发表于:2003-03-31 11:55:23
发表评论】 【查看原文】 【Sybase讨论区】【关闭

我想问一下:
我们公司的客户录错了数据需要修改编码(这些东西在程序里边是不能直接修改的),需要通过数据库来修改,但是会关联到别的表的数据的修改。我想问一下高手:用触发器还是存储过程比较好。请各位帮忙看一下。



 Blackrose 回复于:2003-03-07 23:43:51

触发器也不过是一种特殊的存储过程,只要能解决问题,都无所谓了。


 流浪着的鱼 回复于:2003-03-08 13:02:43

怎么说呢触发器是你定义的对数据库执行某些操作时才会触发的一些操作,
而存储过程是你定义的一些特定操作在你想用的时候去执行它,看你自己的需要选择啦个人,孰优孰劣好象不好说喔,看个人喜欢喽


 learningunix 回复于:2003-03-08 13:14:46

那个性能比较好一些


 Blackrose 回复于:2003-03-08 13:42:26

应该只是应用的层面不一样
跟性能没有太多关系!


 learningunix 回复于:2003-03-08 14:19:16

麻烦您给介绍一下吧!好吗?


 learningunix 回复于:2003-03-09 18:40:38

哪为老兄能给小弟写一个简单的例子
在存储过程中实现修改一张表时触发修改其它表中的关联字段
谢谢了


 红豆妹妹 回复于:2003-03-10 08:46:02

触发器是一个存储过程,当它创建的表被修改时触发(自动执行)。
触发器能够实现所有的参照完整性需求。
和约束相比,优点有:灵活;最适用于当商业规则不能用参照约束表达时,例如级联修改或删除。


 Blackrose 回复于:2003-03-10 19:33:39

基本上就这些了

如果要讲讲触发器,最好自己看看书。
书才是我们最好的老师!!!!


 learningunix 回复于:2003-03-11 20:09:59

哪位老兄能给小弟写一个简单的例子 
在存储过程中实现修改一张表时触发修改其它表中的关联字段 
谢谢了


 learningunix 回复于:2003-03-13 12:32:31

请高手帮忙举个例子吧!


 learningunix 回复于:2003-03-13 13:06:16

帮帮忙吧!
这么多天了都


 红豆妹妹 回复于:2003-03-13 13:39:55

create trigger trg_i_bmzhb
on bmzhb
for insert
as
   update test set a.id=b.nid from test a,bmzhb b where a.id=b.oid
   update tmphxk set a.id=b.nid from tmphxk a,bmzhb b where a.id=b.oid



这时往表bmzhb中insert数据时,表tes、tmphxk会把符合条件的id修改。
(这是修改test、tmphxk表中的错误编码D)


 learningunix 回复于:2003-03-13 20:04:23

红豆妹妹,你好!我是想问如果用存储过程的话怎么解决?
触发器我已经搞定了


 learningunix 回复于:2003-03-13 21:21:16

帮帮忙呀!


 learningunix 回复于:2003-03-14 11:36:36

请各位帮忙看一下


 learningunix 回复于:2003-03-15 22:23:02

请各位帮忙看一下!


 jazy 回复于:2003-03-16 12:11:47

我觉得存储过程和触发器都是在服务段执行的批语句(可能这样说有点不恰当),但是触发器故名思意是被触发执行的,这点由数据库可以保证它被适时地被触发,而存储过程是需要你主动去掉用的。两者不可互相替代!


 jazy 回复于:2003-03-16 12:13:55

不好意思,回错贴了!

你还有什么疑问?


 learningunix 回复于:2003-03-16 20:14:14

自己再顶一下!
请各位帮忙看一下
谢谢


 jazy 回复于:2003-03-16 20:28:53

还有什么疑问,别光顶不说阿!!


 learningunix 回复于:2003-03-16 21:06:04

想让给举一个例子
就是在存储过程中实现类似触发器的功能
不知可否


 jazy 回复于:2003-03-16 21:16:18

不可以!

因为触发器是在对表修改是自动触发执行!

但存储过程则不会自动触发,当然你是可以在触发器中调用存储过程去完成操作,不过那是另外一回事!

你要明白,他们是两种概念!不可混了!各有各的用处!


 learningunix 回复于:2003-03-16 21:36:17

我知道呀!
我是说在存储过程中写一些SQL语句,判断修改表的时候关联修改其他的表,是不是有这个必要


 jazy 回复于:2003-03-16 22:05:44

这个没必要了,在触发器里本身就可以完成
不知道我是不是理解了你的意思!


 learningunix 回复于:2003-03-16 22:29:08

触发器不是比存储过程占的资源多吗


 learningunix 回复于:2003-03-24 16:57:15

最后再问高手一下:

能不能用存储过程实现表的关联修改?如果可以的话,是不是很麻烦?数据量很大时,性能怎么样?

谢谢了!谢谢了!


 learningunix 回复于:2003-03-25 12:38:36

高手


 learningunix 回复于:2003-03-25 15:01:46

help me !!


 learningunix 回复于:2003-03-26 15:55:00

help me !!


 learningunix 回复于:2003-03-26 16:49:08

能不能用存储过程实现表的关联修改?如果可以的话,是不是很麻烦?数据量很大时,性能怎么样?


 learningunix 回复于:2003-03-27 12:52:03

能不能用存储过程实现表的关联修改?如果可以的话,是不是很麻烦?数据量很大时,性能怎么样?


 learningunix 回复于:2003-03-27 14:33:08

能不能用存储过程实现表的关联修改?如果可以的话,是不是很麻烦?数据量很大时,性能怎么样?


 learningunix 回复于:2003-03-28 13:05:56

能不能用存储过程实现表的关联修改?如果可以的话,是不是很麻烦?数据量很大时,性能怎么样?


 learningunix 回复于:2003-03-31 11:55:23

能不能用存储过程实现表的关联修改?如果可以的话,是不是很麻烦?数据量很大时,性能怎么样?

再次请教高手看一下:
没有人问,只好自己往前提了!




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=29091
转载请注明作者名及原文出处