2017-04-24 79 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表的新插入语句。