触发器是否能实现这个功能?

[复制链接]
查看11 | 回复7 | 2007-9-26 17:05:46 | 显示全部楼层 |阅读模式
我现在有一个逻辑是这样的,应用系统在往正式表里传输数据的时候,我想判断有没有重复数据,如果有重复数据,则此次插入取消,并执行一个UPDATE语句,更新原来那条数据。如没有重复数据则完成插入。本来想考虑通过一个触发器完成,但是结果发现无法实现。请问有无高人可以实现
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
你可以在正式表上面加一个Trigger,在Insert之前判断,好像可以的吧
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
楼上的,应该是不行呀,你在INSERT之前触发,那么你如何控制语句不插入呢。你触发器执行完了,它之后的操作就是插数据到正式表呀,整个触发器是做为一个事物来控制的,你没可能控制之后的插入操作不运行吧。
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
MERGE [hint] INTO [schema .] table [t_alias] USING [schema .]
{ table | view | subquery } [t_alias] ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
同意三楼的,meger into
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
就是干吗不用merge
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
如果目标表和要插入的数据量都很大的话,就不要用merge了,改为用存储过程:
1、将待插入的数据划分为待更新、待插入两个临时表
2、执行更新
3、执行插入
回复

使用道具 举报

千问 | 2007-9-26 17:05:46 | 显示全部楼层
最初由 myfriend2010 发布
[B]MERGE [hint] INTO [schema .] table [t_alias] USING [schema .]
{ table | view | subquery } [t_alias] ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause; [/B]


就是撒,merge一下子就搞定了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行