Sql 消费。你的意思是DECLARE@p_mnozstvi INTEGER=(从deleted中选择Count(množstvíSklad)?你的触发器假设DELETE包含一行(DECLARE@pžmnozstvi INTEGER=(从deleted中选择mno
Sql 消费。你的意思是DECLARE@p_mnozstvi INTEGER=(从deleted中选择Count(množstvíSklad)?你的触发器假设DELETE包含一行(DECLARE@pžmnozstvi INTEGER=(从deleted中选择mno,sql,sql-server,tsql,stored-procedures,triggers,Sql,Sql Server,Tsql,Stored Procedures,Triggers,消费。你的意思是DECLARE@p_mnozstvi INTEGER=(从deleted中选择Count(množstvíSklad)?你的触发器假设DELETE包含一行(DECLARE@pžmnozstvi INTEGER=(从deleted中选择množstvíSklad)),它不应该这样做。一个DELETE可以包含一行或多行,并且对于单个DML操作触发一次触发器(不是每行触发一次)。因此,如果DELETE包含多行,则对象deleted也将包含多行,突出显示的SQL将失败。行DELETE F
消费。你的意思是
DECLARE@p_mnozstvi INTEGER=(从deleted中选择Count(množstvíSklad)
?你的触发器假设DELETE
包含一行(DECLARE@pžmnozstvi INTEGER=(从deleted中选择množstvíSklad)
),它不应该这样做。一个DELETE
可以包含一行或多行,并且对于单个DML操作触发一次触发器(不是每行触发一次)。因此,如果DELETE
包含多行,则对象deleted
也将包含多行,突出显示的SQL将失败。行DELETE FROM ZbožíWHERE(SELECT ZbožíID FROM deleted)=ZbožID
也做出了相同的假设。
DELETE FROM Zboží WHERE (SELECT zbožíID FROM deleted) = zbožíID
DELETE FROM Zboží WHERE zbožíID IN (SELECT zbožíID FROM deleted)
DECLARE @p_mnozstvi INTEGER;
SELECT @p_mnozstvi = množstvíSklad FROM deleted;
CREATE TRIGGER zkontrolujMnožství ON Zboží INSTEAD OF DELETE
AS BEGIN
DECLARE @p_mnozstvi INTEGER;
DECLARE d_cursor CURSOR FOR
SELECT množstvíSklad FROM deleted;
OPEN d_cursor;
FETCH NEXT FROM d_cursor INTO @p_mnozstvi;
WHILE @@FETCH_STATUS = 0
BEGIN
IF @p_mnozstvi < 0 -- Try to know if is empty
EXECUTE vyvolej_chybu_sp 15; -- Raise error
ELSE
DELETE FROM Zboží WHERE zbožíID IN (SELECT zbožíID FROM deleted);
END;
CLOSE db_cursor;
DEALLOCATE db_cursor;
END;
CREATE TRIGGER zkontrolujMnožství ON Zboží INSTEAD OF DELETE
AS BEGIN
IF (EXISTS (SELECT 1 FROM deleted WHERE množstvíSklad < 0)
EXECUTE vyvolej_chybu_sp 15; -- Raise error
ELSE
DELETE FROM Zboží
WHERE zbožíID IN (SELECT zbožíID FROM deleted);
END;