请教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 展开
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 行, 相当于没删除。
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吗
展开全部
把这段代码拷到那里就行了。
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
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才是删除,上面的意思就是说,当存在这样的记录时,把它删掉。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询