2011-06-08 54 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