2017-04-24 62 views
0

如果確定某個團隊成員太多,我正在建立團隊名單並嘗試阻止INSERT。觸發器觸發,但條件不評估。這是觸發:SQL INSTEAD OF條件未評估

CREATE TRIGGER RosterDeleteTrigger1 
ON dbo.Roster 
INSTEAD OF INSERT 
AS 
    BEGIN 
     DECLARE @val int 

     SELECT @val = COUNT(*) 
     FROM 
     (
      SELECT r.RosterID, r.TeamID 
      FROM Roster r 
      JOIN inserted i 
      ON r.RosterID = i.RosterID 
      WHERE r.TeamID = i.TeamID 
      AND r.PlayerStatus = 'Active' 
     ) src; 
     PRINT @val 
     IF(@val) > 6 
      PRINT 'hello' 

     --More code to allow the commit if @val is under 6 
    END 

IF聲明只是現在來測試邏輯。到目前爲止,它不打印hello。 insert語句插入到TeamID 1,它有7個成員,所以它應該進行評估。 @val打印出一個0,所以我不知道我的計數查詢究竟出了什麼問題。

最終我想允許提交如果計數很低,但我甚至沒有想出如何開始。

+0

放棄使用觸發器。使用IF EXISTS語句來檢查玩家數量並強制插入使用此方法。通過這種方式,您可以防止昂貴的插入操作(以及可能需要的任何鎖定)從一開始就發生。 –

回答

0

這是一個INSTEAD OF觸發器,所以它沒有將記錄插入到表中,只是插入到插入的僞指令中。所以當你加入名冊時,自然沒有結果。我假設你想添加當前名單中的結果以及插入表中的內容以獲得您的條件。在這種情況下,使用UNION語句而不是聯接。此外,如果插入中存在多個團隊ID,會發生什麼情況?我會使用一個表變量而不是標量變量,並在其中包含團隊ID以及計數。

一旦您確定可以添加團隊成員,那麼您可以編寫一個從插入的表插入到Roster表的新插入語句。