我正在尝试编写一个触发器,检查列表中的值来比较它 从另一列的值计数这完美但我的触发器 用我同样的想法编写的内容并没有在我预期的时候提示 这是我的测试它工作正常
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
答案 0 :(得分:0)
原因可能是,变量 @cours 未在触发器中分配值。