我有以下觸發器。在插入新行時,存儲過程無法獲取變量@ItemID
的參數值。我想新插入行ITEMID列的值傳遞給存儲過程CalculateCurrentStock
SQL觸發器執行問題
ALTER TRIGGER UpdateCurrentStock
ON StockIn
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
EXEC CalculateCurrentStock (SELECT ItemID From INSERTED)
END
錯誤文本讀取
過程或函數「CalculateCurrentStock」預計參數 「@ItemID」,那是不供給的。該語句已終止。
謝謝你的幫助。
編輯:回答
我已經改變了觸發按德里克Kromm的和KM的建議
ALTER TRIGGER UpdateCurrentStock
ON StockIn
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @CSV varchar(max)
SELECT @CSV=ISNULL(@CSV+',','')+ItemID From INSERTED
EXEC CalculateCurrentStock @CSV
END
感謝您的幫助:)
元帥,即ISN不是我所建議的。如果更新單行,您的修改後的觸發器纔會起作用。如果你更新多行,它將不起作用。 –
**如果您的'INSERTED'表中包含多行,'edit'將會失敗。**最好的做法是始終編寫觸發器以支持'INSERTED'和/或'DELETED'中的多行。在單個語句中插入/更新/刪除多行是相當容易和常見的,任何只處理單行的觸發器都將以「邏輯」方式失敗,而不會出現錯誤消息(數據會混亂)。嘗試一下,看看你的觸發器失敗:INSERT INTO StockIn(col1,col2,...)SELECT TOP 3 col1,col2,... FROM StockIn ORDER BY ItemID'這個假定ItemID是一個身份PK。 –
我重新編輯了答案。感謝Derek和KM提供的寶貴輸入 – Marshal