2014-11-19 7 views
0

나는 트리거에 대해 배우려고 노력하고 있으며, 정말 기본적인 것들을하는 법을 알고 있지만, 이것에 대해 머리를 감쌀 수는 없습니다. 나는 2 개의 테이블 서비스 (주인) 및 판매가있다.SQL에서 트리거를 수행하려면 어떻게합니까?

Services(ServiceID,ServiceCost,SalesTotal) 
Sales(TransactionID,TransactionDate,Amount,ServiceID) 

업데이트, 삭제, 삽입을위한 트리거를 작성하려고합니다. Sales 테이블에 새로운 판매를 입력하면 SalesTotal이 ServiceID에 따라 Services 테이블에서 업데이트됩니다.

전 다음 SalesTotal는 TransactionId에 대한 '101'1,000 인 경우

INSERT INTO Sales(TransactionID,TransactionDate,Amount,ServiceID) 
VALUES ('16','2014-11-19','50','101'); 

그래서, 삽입 후 1050 일 내가 삭제 한 경우 반대 것/업데이트되었습니다.

내가 조인 테이블을 사용해야한다고 생각하지만 현재 난처한 상황입니다.

+4

SQL 구문은 모든 DB 엔진에 대한 다른 트리거 안에이 추가. 어느 쪽을 사용합니까? –

답변

0

사용이 트리거 또는 분할 삽입/dalete/업데이트 : 코드 :

 
CREATE TRIGGER [dbo].[t_Update_Services] on Sales AFTER UPDATE,INSERT, DELETE

AS

BEGIN

UPDATE a SET SalesTotal = SalesTotal - b.Amount FROM Services a JOIN deleted b ON a.ServiceID = b.ServiceID

UPDATE a SET SalesTotal = SalesTotal + b.Amount FROM Services a JOIN inserted b ON a.ServiceID = b.ServiceID

END

+0

빠른 응답 주셔서 감사합니다, 나는 질문이 있습니다. 어떻게하면 테이블에 가입 할 때 '삭제'또는 '삽입'이라고 명시해야합니까? –

+0

트리거에 대한 sys 임시 테이블. Sales에서 일부 값을 삭제하면 원래 삭제 된 행이 임시로 삭제됩니다. 삽입하면 삽입 된 테이블에서 삽입 된 값을 잡을 수 있습니다. 삽입/삭제 된 원본은 원래와 동일한 구조를가집니다. 그러나 트리거에서만 사용할 수 있습니다. – Matej

+0

행을 UPDATE하면 원래 값이 삭제되고 새로운 업데이트 값이 삽입됩니다. SQL Server가 처음에 원래 행을 삭제 한 다음 새 값으로 새 행을 삽입하기 때문에 – Matej

0

BEGIN 
if exists (select * from deleted) 
begin 
    UPDATE Services 
    SET SalesTotal = SalesTotal - deleted.Amount 
    FROM Services 
    JOIN deleted ON Services.ServiceID = deleted.ServiceID 
end 
else 
begin 
    UPDATE Services 
    SET SalesTotal = SalesTotal + inserted .Amount 
    FROM Services 
    JOIN inserted ON Services.ServiceID = inserted.ServiceID 
end 
END 
+0

도움을 주셔서 감사합니다. 그러나 Matej가 먼저 응답하므로 답변을 수락했습니다. –

관련 문제