2017-12-23 7 views
0

나는 여전히 SQL을 배우고 있으며 트리거를 사용하는 데 문제가 있습니다. 내가 판매 테이블에서 행을 삭제 한 후SQL Server 삭제 트리거가 업데이트되지 않음 표

CREATE TRIGGER DeleteYTDSales 
ON dbo.Sales 
AFTER DELETE 
AS 
BEGIN 
    UPDATE MasterTable 
    SET MasterTable.SalesYTD = MasterTable.SalesYTD - Deleted.Amount 
    FROM Sales 
    JOIN Deleted ON Sales.CustomerID = Deleted.CustomerID 
END 
GO 

, 내가 MasterTableCustomerID에 대한 SalesYTD 열을 업데이트해야합니다

나는 다음과 같은 코드가 있습니다. 지금은 열을 업데이트하지 않고 이유를 파악할 수 없습니다.

+0

태그 질문 :

당신은 또한이 같은를 작성할 수 있습니다. –

+0

'구문'및 악명 높은 'GO'에 따라 SQL Server 태그가 추가되었습니다. –

답변

2

MasterTable에 대한 조인 조건이 누락되었습니다. 이것을 찾고 있습니다

UPDATE m 
    SET m.SalesYTD = m.SalesYTD - d.Amount 
    FROM MasterTable m 
    JOIN Deleted d ON d.CustomerID = m.CustomerID 
0

업데이트가 정말 이상합니다. 난 당신이 단순히하려는 생각 :

코드에서
UPDATE mt 
    SET SalesYTD = mt.SalesYTD - d.Amount 
    FROM MasterTable mt JOIN 
     Deleted d 
     ON mt.CustomerID = d.CustomerID ; 

, 당신은 MasterTable모든 행을 업데이트하고 있습니다. SQL 서버는 UPDATE으로 다소 까다로울 수 있습니다. 내 충고는 FROM 절을 사용하고 항상 UPDATE에 별칭을 넣는 것입니다.

Sales 테이블을 참조 할 필요가 없습니다. 필요한 모든 정보는 deleted입니다. 사용중인 데이터베이스

UPDATE MasterTable 
    SET SalesYTD = mt.SalesYTD - d.Amount 
    FROM Deleted d 
    WHERE MasterTable.CustomerID = d.CustomerID ;