2013-10-15 3 views
2

난을 heres 트리거 질문SQL 서버 트리거

소유자 표가 그 소유자가 임대 모든 전표의 총 임대료를 나타내는 TotalRental라는 열을 포함한다고 가정 해 봅시다 도움이 필요합니다. 텍스트

a.When MarinaSlip 테이블에 행을 삽입에 표시된 스타일을 다음 다음 트리거에 대한 코드를 작성 해당 소유자

을 heres 내 SQL

의 총 임대로 임대료를 추가
CREATE TRIGGER add_rentalfee 
ON MarinaSlip 
AFTER INSERT 
AS 
BEGIN 

SET NOCOUNT ON; 

UPDATE Owner 
SET TotalRental = TotalRental + RentalFee 
FROM Owner INNER JOIN MarinaSlip ON Owner.OwnerNum = MarinaSlip.OwnerNum 
WHERE owner.OwnerNum = MarinaSlip.OwnerNum 

END 
GO 

당신은 문제가 내가 행을 삽입 할 때 테이블 만이 아니라 내가 무슨 잘못 설명하십시오 원하는 하나 내가 그것을 고칠 수있는 방법 임은 마이크로 소프트 사용의 모든 행을 변경한다는 것이다 SQL로 메신저 새로운 말할 수있는 SQL 서버 2012 감사합니다

,210

답변

1

당신은 삽입 된 행만 선택 삽입 된 테이블에 가입해야합니다 : 두 테이블 함께

CREATE TRIGGER add_rentalfee 
ON MarinaSlip 
AFTER INSERT 
AS 
BEGIN 

SET NOCOUNT ON; 

UPDATE Owner 
SET TotalRental = TotalRental + RentalFee 
FROM Owner INNER JOIN MarinaSlip ON Owner.OwnerNum = MarinaSlip.OwnerNum 
INNER JOIN INSERTED ON owner.OwnerNum = INSERTED.OwnerNum 

END 
GO 

당신은 조금 더 가까이 SELECT 문을 조사하면, INNER JOIN 링크를하지만 WHERE 절입니다 어떤 필터링도하지 않습니다. 당신이 서버라면, 진술을 어떻게 읽습니까? 마리나 슬립의 소유자 번호와 일치하는 모든 행을 업데이트하십시오.

TechNet: Use the inserted and deleted Tables

+0

감사합니다 – user2881301

0

삽입 한 표를 사용하고 또한 당신의 질의가 한 번에 삽입 된 행 수를 처리 할 수 ​​있는지 확인해야합니다 : 당신이 그나마 많은 내가이 작업 한 시간을 알고 싶어

UPDATE Owner 
SET TotalRental = TotalRental + insT.SumRentalFee 
FROM Owner 
INNER JOIN 
(select OwnerNum, sum(RentalFee) as SumRentalFee 
     from INSERTED 
     group by OwnerNum) as insT 
ON Owner.OwnerNum = insT.OwnerNum