我遇到了一些复杂查询的问题,这要求我在表中插入一些东西,但是如果我发现两列是相同的,我应该用触发器来停止事务。我做了一些代码来做到这一点,但即使它现在正常工作,我也不确定100%。
alter trigger TR1
on Passer instead of insert
as
begin
declare @A int
declare @B int
declare @C int
set @A = (select code_ligne from inserted)
set @B = (select ordre_passage from inserted)
set @C = (select code_ville from inserted)
select * from passer
where code_ligne = @A
and ordre_passage = @B
if(@@rowcount = 0 )
begin
insert into Passer values(@A,@C,@B)
print 'okay'
print @@rowcount
end
end
答案 0 :(得分:0)
当你在触发器中有这样的标量变量时,你会遇到问题。如果一次插入两行,则只会在Passer中插入1行。你根本不需要这些变量。只需将其切换为基于单个集的插入语句即可。这些方面的东西。
alter trigger TR1 on Passer instead of insert as
begin
insert into Passer
(
code_ligne
, ordre_passage
, code_ville
)
select i.code_ligne
, i.ordre_passage
, i.code_ville
from inserted i
join Passer p on p.code_ligne = i.code_ligne
and p.ordre_passage = i.ordre_passage
if(@@rowcount = 0 ) begin
print 'okay'
print @@rowcount
end
end