2011-06-08 55 views
0

有没有一种方法可以检查一个表中是否存在一个值,我想插入一个触发器来激活它?如果该值确实存在,我不想做任何事情,如果它不,我希望它被插入。如果在触发器中存在

这是我目前的触发

 
ALTER TRIGGER [dbo].[Update] 
On [dbo].[A] 
AFTER UPDATE 
AS 
Declare @Id int; 
SELECT @Id = Issue FROM Inserted 


INSERT INTO dbo.[B] (id, problem) 
    SELECT BugId, ProjectID 
    FROM dbo.[C] 
    WHERE BugId = @Id and (projectid = 547) 

非常感谢

+0

可能重复[SQL服务器:触发仅当条件满足火(http://stackoverflow.com/questions/280904/ sql-server-trigger-to-fire-only-if-a-condition-is-met) – 2011-06-08 09:00:01

+1

@Johann - 对于这个问题的答案在插入表中存在多行时仍然存在错误,这与条件相符,其中一些不符合。 – 2011-06-08 09:32:27

回答

1

inserted可以包含多行。而left join可以成为你的朋友用于测试行是否已经存在:

ALTER TRIGGER [dbo].[Update] 
On [dbo].[A] 
AFTER UPDATE 
AS 

INSERT INTO dbo.[B] (id, problem) 
    SELECT BugId, ProjectID 
    FROM 
     dbo.[C] 
      inner join 
     inserted i 
      on 
       c.BugID = i.Issue 
      left join 
     dbo.B 
      on 
       B.ID = c.BugID 
    WHERE 
     C.projectid = 547 and B.BugID is null 
1

你应该这样做所描述in this SO post。使用IF语句来检查存在。

+0

像这样的'IF'测试的问题是,它为'inserted'伪表中的潜在多行提供了单一的真/假答案 - 实际上可能有真/假结果的混合。 – 2011-06-08 09:00:20