我可以在SQL Server的INSTEAD OF INSERT触发器中放入INSERT吗



我在处理一个复杂的查询时遇到了一些问题,需要在表中插入一些内容,但如果我发现两列相同,我应该使用触发器停止事务。我制作了一些代码来做到这一点,但即使现在工作正常,我也不能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

最新更新