2016-10-04 4 views
0

주문 가격을 업데이트하는 트리거를 작성하는 데 문제가 있습니다.복수 행의 SQL 트리거

나는 order_id 및 goods_id 쌍을 포함하는 테이블을 가지고 있습니다. 다음은 삭제를 위해 사용하는 코드의 일부입니다. 나머지는 기본적으로 같습니다.

주문 - 상품 테이블에 동일한 order_id가있는 행이 여러 개있는 경우 update 문은 하나만 처리합니다.

스택 오버플로와 비슷한 예제가 많이 보였습니다.하지만 조금 다르며 제 상황에는 적용되지 않습니다.

커서를 사용하여 삭제 된 테이블의 모든 행을 반복하는 솔루션이 있다는 것을 알고 있지만 이러한 접근 방법을 피하고 싶습니다. 가능한가?

답변

2

사용 JOIN의 함께 테이블을 가져 오는 경우 :

UPDATE o 
    SET order_price -= d.input_amount * g.goods_price 
    FROM dbo.Order o JOIN 
     deleted d 
     ON o.order_id = d.order_id JOIN 
     dbo.Goods g 
     ON g.goods_id = d.goods_id; 

편집 : 다음

Order이 같은 good 여러 행이있을 경우, 총 가입하기 전에 :

UPDATE o 
    SET order_price -= d.input_amount * g.goods_price 
    FROM dbo.Order o JOIN 
     (SELECT d.order_id, d.goods_id, SUM(d.input_amount) as input_amount 
      FROM deleted d 
      GROUP BY d.order_id, d.goods_id 
     ) d 
     ON o.order_id = d.order_id JOIN 
     dbo.Goods g 
     ON g.goods_id = d.goods_id; 
+0

불행하게도 동일한 order_id를 가진 여러 행에 대해 여전히 작동하지 않습니다. 그 중 하나를 기반으로 만 업데이트됩니다. –