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;