2017-03-31 10 views
1

트리거가 어떤 이유로 4 번 삽입되고 마지막 트리거가 그룹화됩니다. 기본적으로 정보가 내 테이블에 삽입되는 경우입니다. tbl_delete_Panel이 데이터를 그룹화하고 그룹화를 tbl_delete_panel_Orderin에 삽입하고 싶습니다.SQL Server 삽입 트리거가 두 번 이상 삽입됩니다.

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

당신은 tbl_delete_panel''에서 전체 행을 삽입 유지, 매번이 트리거가 호출됩니다. ** 할 일은 ** 여러 행을 가질 수 있고 포함 할 수있는'Inserted' 의사 테이블을보고 그 행들을 삽입하는 것입니다 ** (트리거를 트리거 한 명령문에 의해 새로 삽입되었습니다). ** 전체 테이블 **! –

답변

1

는 지금, 당신은 tbl_delete_panel에서 행의 세트를 삽입 유지, 모든 시간이 트리거가 발생합니다.

당신 Inserted 의사 테이블 캔을보고있다 대신을해야하고 여러 행이 포함됩니다 무엇 (그래서 당신은 좋은, 적절한 세트 기반의 접근 방식와 그 상황을 처리 할 필요가 없습니다 - 더 커서를 , no while 루프!) - 매번 전체 테이블이 아닌 트리거를 실행시키는 명령문에 의해 새로 삽입 된 행을 삽입하십시오! 이 같은

시도 뭔가 :

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;