2014-12-05 4 views
0

Пожалуйста, помогите мне с триггерами на языке SQL.SQL Server: Trigger after insert, delete

У меня есть 2 стола product_subcategories и Products.

  • product_subcategories: id, name, count_products
  • Products: id, name, price, id_product_subcategories

Необходимо при добавлении или удалении строк в таблице продукта, чтобы обновить количество товаров в категориях

Например, у нас есть два подкатегории «name = first, count_products = 0», «name = second, count_products = 0». При добавлении в таблицу продуктов 3 строки: «name = pr1, price = 1, id_product_subcategories = 1», «name = np2, price = 2, id_product_subcategories = 1», «name = PR3, price = 5, id_product_subcategories = 2»

Таблица подкатегорий должны выглядеть

"название = первый, count_products = 2", "имя = второй, count_products = 1"

Вот что я писал, но по какой-то причине он не работает для одного и я не понимаю, как это сделать, когда вы добавляете несколько строк в качестве прохода по каждой строке во вставленной таблице?

CREATE TRIGGER 
    countproductscategories 
ON 
    dbo.products 
AFTER 
    INSERT 
AS 
IF @@ROWCOUNT = 1 
BEGIN 
    UPDATE dbo.product_subcategories 
    SET count_products = count_products + 1 
    WHERE dbo.product_subcategories.id = (SELECT id FROM inserted) 
END; 

ответ

1

Что такое @@ROWCOUNT = 1? Это должно делать то, что вы хотите:

CREATE TRIGGER 
    countproductscategories 
ON dbo.products AFTER INSERT 
AS 
BEGIN 
    UPDATE dbo.product_subcategories 
     SET count_products = count_products + 1 
     WHERE dbo.product_subcategories.id IN (SELECT id FROM inserted) 
END; 

Если вы хотите, чтобы это сделать, когда только одна строка вставляется, то вы можете сделать:

CREATE TRIGGER 
    countproductscategories 
ON dbo.products AFTER INSERT 
AS 
BEGIN 
    UPDATE dbo.product_subcategories 
     SET count_products = count_products + 1 
     WHERE dbo.product_subcategories.id IN (SELECT id FROM inserted) AND 
       (SELECT COUNT(*) FROM inserted) = 1; 
END; 
+0

спасибо, это работа –

Смежные вопросы