У меня есть следующий триггер. При вставке новой строки Хранимая процедура не может получить значение параметра переменной @ItemID
. Я пытаюсь передать значение ItemID колонны вновь вставленной строки хранимой процедуры CalculateCurrentStock
Ошибка выполнения SQL Trigger
ALTER TRIGGER UpdateCurrentStock
ON StockIn
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
EXEC CalculateCurrentStock (SELECT ItemID From INSERTED)
END
Текст ошибки читает
Процедура или функция «CalculateCurrentStock» ожидает параметр «@ItemID», который не был поставлен. Заявление было прекращено.
Благодарим за помощь.
EDIT: Ответ
Я изменил триггер на Derek Кромм-х и предложение КМ в
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
Спасибо за помощь :)
Marshal, что ISN Я предложил. Ваш модифицированный триггер будет работать, только если вы обновите одну строку. Если вы обновите несколько строк, это не сработает. –
** ваше 'edit' не будет выполнено, если ваша таблица' INSERTED' содержит более одной строки. ** Лучше всего всегда писать триггеры для поддержки нескольких строк в 'INSERTED' и/или' DELETED'. Достаточно легко и просто вставлять/обновлять/удалять несколько строк в одном выражении, и любой триггер, который обрабатывает только одну строку, терпит неудачу «логическим» способом без сообщения об ошибке (ваши данные перепутались). попробуйте что-то подобное, чтобы ваш триггер не сработал: INSERT INTO StockIn (col1, col2, ...) SELECT TOP 3 col1, col2, ... FROM StockIn ORDER BY ItemID 'this предполагает, что ItemID является идентификатором PK. –
Я отредактировал ответ. Спасибо Derek и KM за ценные входы – Marshal