SQL INSTEAD OF条件未评估

时间:2017-04-24 21:08:07

标签: sql-server tsql triggers

我建立一个团队名单并试图阻止INSERT,如果它确定某个团队已经拥有太多成员。触发器触发,但条件无法评估。这是触发器:

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,因此我无法确切知道计数查询的错误。

最终,如果计数很低,我想允许提交,但我甚至没有想出如何开始。

1 个答案:

答案 0 :(得分:0)

这是一个 INSTEAD OF 触发器,因此它没有将记录插入到表中,而只是插入到插入的伪表中。所以当你加入名册时,自然没有结果。我假设您要添加当前名册中的内容以及插入表格中的内容以获取您的条件。在这种情况下,使用UNION语句而不是连接。此外,如果插入中有多个团队ID,会发生什么?我会使用带有count而不是标量变量的表变量,并在其中包含团队ID以及计数。

一旦确定可以添加团队成员,就可以编写一个新的插入语句,从插入的表插入到Roster表中。