触发器怎么写???(100分)

黑猫

Unregistered / Unconfirmed
GUEST, unregistred user!
SQL SERVER数据库中有表DDD,其中有字段A,B,C,D 在插入记录时,若数据表中的A,C两个字段
的值已经存在,也就是要插入的记录的A,C两字段的值与数据表中的某条记录的A,C的值相等,则
修改数据表中的记录,如果数据表中没有A,C两字段值与要插入记录的A,C两字段值相等就在数
据表中追加该记录,请问用触发器怎么写???
 
不用触发器,而使用存储过程,在想提交的地方调用存储过程。
输入参数VA、VB、VC、VD,先尝试从DDD表中查找A=VA AND C=VC的记录,如果有则
以此为条件更新记录,否则插入记录。
输出参数VRETULT,可以定义为一种是更新记录,一种是插入记录,还有一种是出错。
 
在程序中处理更简单、方便
 
这种处理还是在程序中处理
保存时,你先在库中查找是否有相同记录
如有,进行修改,没有则增加
如果对速度不是很高要求,就这样做,否则用存储过程,不过相对来说,比较烦,不值得
 
赞同 armyjiang 的说法
 
CREATE TRIGGER dddInserttrig ON [ddd]
INSTEAD OF INSERT
AS
if not exists(select * from ddd,inserted i where i.a=ddd.a and i.b=ddd.b)
begin
insert into ddd select * from inserted
end
else
begin
update ddd set ....
end
 
该表数据量大,是个实时数据表,程序实时写数据,若在程序中查找肯定影响速度,所以想
将他做成触发器放到服务器端,程序提交后不管,但我不知道触发器该怎样去写。
存储过程也可以考虑,但我觉得还是能用触发器是最好了,希望各位能给触发器代码更好
分不够可以在加!
 
触发器可不是好的方案啊
你想想,触发器可是要执行一个操作后,或前,触发事件执行的代码
最终这个操作还是要执行,你是对同一个库进行触发操作,会有重复数据进库啊
建议还是同上我的回答,其实在客户端操作,只对一个表进行操作,速度还是可以的
你的实时性,不是要求这么高吧,现在的机器性能都不错,最重要是看你网络运行速度
 
本來想寫一句的﹐看到這么多高手在這里﹐不好意思獻丑了﹗﹗哈哈
 
你的要求用触发器来实现是不合理的,就如snjat所说。最好是用存储过程来做。
如果按snjat的方法来写的话,在查询时限定查询结果只是一条。省得在网络上传输的数据
量过大。
 
不常用SQL!
如果有instead of insert这种触发方式,liqunxin的方法最有效!
 
我認為最好是用存储过程来做,在inert Into 前先判斷,其思路和在程序中处理一樣.
這樣的操作在書據庫中處理當然比在程序中快。
 
多人接受答案了。
 

Similar threads

回复
0
查看
920
不得闲
回复
0
查看
738
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部