在SQL Server中编写触发器

时间:2016-11-22 10:01:48

标签: sql sql-server triggers

我正在尝试编写一个触发器,检查列表中的值来比较它 从另一列的值计数这完美但我的触发器 用我同样的想法编写的内容并没有在我预期的时候提示 这是我的测试它工作正常

declare @nombreMax int
declare @cours int
declare  @maxtu int

set @cours = 1
set @maxtu = (select max_etudiant from Cours where id = @cours)

select @nombreMax = count(*) 
from [dbo].[ETUDIANT] 
where ETU_COURS = @cours

if (@nombreMax > @maxtu) 
    print 'depassé de ' 
else 
    print 'ok'

但这不起作用 - 我错过了什么?

CREATE TRIGGER [dbo].[VerifNombreEtu]
ON [dbo].[ETUDIANT]
AFTER INSERT, UPDATE
AS 
BEGIN
    DECLARE @ETU_ID INT
    DECLARE @cours nvarchar(50)
    DECLARE @status INT
    DECLARE @nombreEtu INT
    DECLARE @Max INT

    DECLARE Maxc2 cursor fast_forward for
         SELECT inserted.ETU_COURS 
         FROM Inserted

    OPEN Maxc2

    FETCH NEXT FROM Maxc2 INTO @ETU_ID

    SET @status = @@FETCH_STATUS

    WHILE @status = 0
    BEGIN
        SET @Max = (SELECT max_etudiant FROM Cours WHERE id = @cours)

        SELECT @nombreEtu = COUNT(*) 
        FROM [dbo].[ETUDIANT] 
        WHERE ETU_COURS = @cours

        IF(@nombreEtu > @Max)
        BEGIN
            RAISERROR('max students reached',17,1)
            ROLLBACK;
        END

        FETCH NEXT FROM Maxc2 INTO @ETU_ID

        SET @status = @@FETCH_STATUS
    END

    CLOSE Maxc2;
    DEALLOCATE Maxc2;
END

1 个答案:

答案 0 :(得分:0)

原因可能是,变量 @cours 未在触发器中分配值。