2017-03-31 3 views
1

Mon déclencheur est pour une raison quelconque inséré 4 fois, et le dernier est uniquement groupé. Fondamentalement ce que je veux faire est quand l'information est insérée dans ma table tbl_delete_Panel Je veux regrouper ces données et insérer le groupement dans tbl_delete_panel_Orderin.SQL Server Insérer le déclencheur en insérant plus d'une fois

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE Trigger[dbo].[deletePanelSQL] 
ON [dbo].[tbl_delete_Panel] 
AFTER INSERT 
AS 
BEGIN 
    /* Insert Summed Quantity for each stud or track into tbl_delete_panel for deletion. tbl_delete_panel trigger will be triggered */ 
    INSERT INTO tbl_delete_panel_Orderin (Part_Name, OrderID, SumOfQTY) 
     SELECT 
      tbl_delete_panel.Part_Name, tbl_delete_panel.OrderID, 
      Sum(tbl_delete_panel.QTY) AS SumOfQTY 
     FROM 
      tbl_delete_panel 
     GROUP BY 
      tbl_delete_panel.Part_Name, tbl_delete_panel.OrderID; 
END; 
+4

Vous gardez l'insertion des lignes complètes de 'tbl_delete_panel', chaque fois que ce déclencheur est appelé. Ce que ** vous devez faire ** est la table pseudo 'Inserted' qui * peut et contiendra * plusieurs lignes - et insérer ** les lignes ** (qui ont été nouvellement insérées par l'instruction qui a déclenché le trigger) - pas la ** table entière ** à chaque fois! –

Répondre

1

En ce moment, vous gardez l'insertion de l'ensemble complet de lignes de la tbl_delete_panel, chaque fois que ce déclencheur est déclenché.

Ce que vous devriez faire à la place est de regarder la table Inserted pseudo qui de la boîte et contiendra plusieurs lignes (vous devez donc gérer cette situation, avec une approche basé sur un ensemble agréable, propre - aucun curseur , no while loops!) - et insère ces lignes (qui ont été nouvellement insérées par l'instruction qui a déclenché le trigger) - pas toute la table à chaque fois!

Essayez quelque chose comme ceci:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE Trigger[dbo].[deletePanelSQL] 
ON [dbo].[tbl_delete_Panel] 
AFTER INSERT 
AS 
BEGIN 
    /* Insert summed quantity for each stud or track into tbl_delete_panel for deletion. tbl_delete_panel trigger will be triggered */ 
    INSERT INTO tbl_delete_panel_Orderin (Part_Name, OrderID, SumOfQTY) 
     SELECT 
      Part_Name, OrderID, 
      Sum(QTY) AS SumOfQTY 
     FROM 
      Inserted i 
     GROUP BY 
      Part_Name, OrderID; 
END;