2014-12-05 130 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