2014-12-05 127 views
0

請幫我用SQL語言中的觸發器。SQL Server:插入,刪除後觸發

我有2個表product_subcategoriesProducts

  • product_subcategoriesid, name, count_products
  • Productsid, 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」

表子類別應該

「NAME =第一,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

謝謝你,這是工作 – 2014-12-05 05:29:47