Похоже, я не смог разобраться со своей проблемой должным образом, поэтому я решил снова задать свой вопрос в другой форме. У меня есть две таблицы с именами SALES_TABLE и PRODUCT_TABLE . Поэтому, когда я продаю товар из таблицы товаров, номер проданного товара (@sale_count) вычитается из общего количества того же товара на складе (pr_stock), и результат отображается в Product_table, а цифры для товара Идентификатор, номер продажи и название продукта должны вызываться с помощью:
INSERT INTO DBO.SALES_TABLE (SALE_COUNT,PROD_ID,Prod_name) VALUES (3,4, @prd_name )
и вставляется в Sales_table. Однако ссылка @prd_name, которая была инициализирована с помощью Product_name из таблицы продуктов, где PRODUCT_id = @PRD_ID выдает ошибку, поскольку она находится вне блока Begin и END.
«Вы должны объявить скалярную переменную @prd_name».
Так как сделать так, чтобы переменная @prd_name передавалась из пакета, чтобы я мог избежать жесткого кодирования Product_name в sale_table?
alter TRIGGER DBO.TRG_STOCK
ON DBO.SALES_TABLE
AFTER INSERT
AS
BEGIN
DECLARE @SALE_COUNT INT
DECLARE @PRD_ID INT
declare @prd_name varchar(20)
SELECT @PRD_ID = PROD_ID, @SALE_COUNT = SALE_COUNT FROM INSERTED
select @prd_NAME = PRODUCT_NAME from PRODUCT_TABLE where PRODUCT_id = @PRD_ID
UPDATE PRODUCT_TABLE SET PR_STOCK = PR_STOCK - @SALE_COUNT WHERE PRODUCT_id = @PRD_ID
END
INSERT INTO DBO.SALES_TABLE (SALE_COUNT,PROD_ID,Prod_name) VALUES (3,4, @prd_name )
Обратите внимание:
INSERT INTO DBO.SALES_TABLE (SALE_COUNT,PROD_ID,Prod_name) VALUES (3,4, @prd_name )
не является частью триггера, это то, что должно запускать скрипт в предложениях Begin и End