我在处理一个复杂的查询时遇到了一些问题,需要在表中插入一些内容,但如果我发现两列相同,我应该使用触发器停止事务。我制作了一些代码来做到这一点,但即使现在工作正常,我也不能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
当触发器中有这样的标量变量时,您将遇到问题。如果同时插入两行,则在Passer中只插入一行。你根本不需要这些变量。只需将其转换为一个基于集合的插入语句即可。沿着这些线的东西。
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