我可以在SQL Server中的INSTEAD OF INSERT触发器中放置一个INSERT吗?

时间:2016-05-18 16:35:55

标签: sql sql-server database triggers

我遇到了一些复杂查询的问题,这要求我在表中插入一些东西,但是如果我发现两列是相同的,我应该用触发器来停止事务。我做了一些代码来做到这一点,但即使它现在正常工作,我也不确定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

1 个答案:

答案 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