请教SQL触发器插入时判断是否记录已存在的问题

ifexists(selectnamefromsysobjectswherename='insert_drawapplydet_ct')dropTRIGGERinsert... if exists(select name from sysobjects where name='insert_drawapplydet_ct')
drop TRIGGER insert_drawapplydet_ct
go
create TRIGGER insert_drawapplydet_ct
ON reqdet
FOR INSERT
AS
declare @sreqno varchar (20)
declare @lineid smallint
declare @itemno varchar (30)
declare @msunit varchar (12)
declare @reqqty numeric(18,6)
declare @duedt datetime
declare @remarks varchar (255)
declare @tr_proj varchar (60)
declare @purchaser varchar (20)
declare @um_conv numeric(18,6)
declare @deptno varchar (20)
declare @uniteflg varchar (1)
select @sreqno=sreqno from inserted
select @lineid=lineid from inserted
select @itemno=itemno from inserted
select @msunit=msunit from inserted
select @reqqty=reqqty from inserted
select @duedt=duedt from inserted
select @remarks=remarks from inserted
select @tr_proj=tr_proj from inserted
select @purchaser=purchaser from inserted
select @um_conv=um_conv from inserted
select @deptno=reqmst.deptno from reqmst
select @uniteflg=reqmst.uniteflg from reqmst
if @deptno='05' and isnull(@uniteflg,0)<>2
begin /*在此请问如何判断如果drawapplydet表中已经存在sysno='DA'+right(@sreqno,10)+'0' ,先删除这些记录 再执行下方的插入记录呢?*/
insert into drawapplydet(sysno,lineid,itemno,ranks,msunit,um_conv,um_conv1,qty,appqty,drawqty,isdraw,qty_a,appqty_a,tr_proj,remarks,um_conv_a,um_conv_am) values
('DA'+right(@sreqno,10)+'0',@lineid,@itemno,'01',@msunit,@um_conv,1,@reqqty,@reqqty,0,0,0,0,@tr_proj,@remarks,0,@reqqty)
end
展开
 我来答
匿名用户
2013-02-27
展开全部
你是执行普通的
INSERT INTO reqdet VALUES (...);
一次插入一行?

还是执行
INSERT INTO reqdet SELECT ... FROM ...
一次插入多行?

如果是一次插入一行的。

/*在此请问如何判断如果drawapplydet表中已经存在sysno='DA'+right(@sreqno,10)+'0' ,先删除这些记录 再执行下方的插入记录呢?*/

简单, 根本就不需要额外去判断。
直接

DELETE FROM drawapplydet
WHERE
sysno='DA'+right(@sreqno,10)+'0' ;

那么满足条件的, 自然会删除,
没有满足条件的, 就删除 0 行, 相当于没删除。
追问
能告诉我一下你的QQ吗
文走520
2013-02-26 · TA获得超过525个赞
知道小有建树答主
回答量:267
采纳率:50%
帮助的人:169万
展开全部
把这段代码拷到那里就行了。

If Exists(Select 1 From rawapplydet Where sysno='DA'+right(@sreqno,10)+'0' )
BEGIN
Delete From rawapplydet Where sysno='DA'+right(@sreqno,10)+'0'
END
更多追问追答
追问
为什么加上您说的这段代码后 我插入的新纪录只有一行呀?
追答
对呀,
Where sysno='DA'+right(@sreqno,10)+'0'
的记录按LZ的意思来说应该只有一条的,前面的if exists是判断有没有,后面的delete才是删除,上面的意思就是说,当存在这样的记录时,把它删掉。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式