2012-03-20 2 views
2

나는 전월의 총 공제액과 나머지 공제액을 계산하는 테이블을 가지고 있습니다.방아쇠의 동일한 테이블을 업데이트하십시오.

이전 달의 나머지 공제액의 업데이트는 다음 달에 다음 달에 영향을 미쳐야하므로이 테이블에 대해 AFTER UPDATE 방아쇠를 만들었지 만 방아쇠가 UPDATE에 의해 호출되지 않은 것으로 나타났습니다. 다음 달.

확인 트리거 코드

CREATE TRIGGER [dbo].[tgUpdateRemainingBalance] 
ON [dbo].[GAT_MONTHLY_DEDUCTION] 
AFTER UPDATE 
AS 
BEGIN 
SET NOCOUNT ON; 

DECLARE @OldTotalDeduction INT 
DECLARE @NewTotalDeduction INT 
DECLARE @OldRemainingToNextMonth INT 
DECLARE @NewRemainingToNextMonth INT 

SELECT @OldRemainingToNextMonth = RemainingToNextMonth, 
@OldTotalDeduction = TotalDeduction 
FROM DELETED 

SELECT @NewRemainingToNextMonth = RemainingToNextMonth, 
@NewTotalDeduction = TotalDeduction 
FROM INSERTED 

DECLARE @EmpNo BIGINT 
DECLARE @RegDate DATETIME 

SELECT @EmpNo = PersonnelNo, @RegDate = RegDate FROM INSERTED 

IF (@OldRemainingToNextMonth <> @NewRemainingToNextMonth) OR (@OldTotalDeduction <> @NewTotalDeduction) 
BEGIN 
UPDATE GAT_MONTHLY_DEDUCTION 
SET TotalDeduction = TotalDeduction - @OldRemainingToNextMonth + @NewRemainingToNextMonth, 
Visited = 1 
WHERE RegDate = DATEADD(month, 1, @RegDate) AND PersonnelNo = @EmpNo 
END 
END 

나는이 다음 업데이트를 다시 트리거를 호출해야 처음으로 트리거를 호출 제외한 트리거가 같은 테이블에 대한 업데이트하고있는 중이 야하지만이 발생하지 않습니다.

해결 방법을 알아야하는 것이 시급한 과제입니다.

감사

조심하는
+0

에 오신 것을 환영합니다 : 당신은 코드, XML 또는 데이터 샘플을 게시하는 경우 ** ** 텍스트 편집기에서 해당 줄을 강조 표시하고 편집기 도구 모음에서 "코드 샘플"단추 ('{}) '를 클릭하여 멋지게 형식을 지정하고 구문을 강조 표시하십시오! –

+0

성취하고자하는 바를 더 잘 전달할 수 있습니까? 매달 변경된 달 이후에 TotalDeduction을 업데이트하려고하지만 트리거 내에서 트리거를 트리거 할 수없는 것 같습니다. 지금 작성된 방식은 이후 업데이트를 위해 트리거가 호출 되더라도 다음 달에만 업데이트됩니다. 변경된 유일한 필드는 TotalDeduction 및 Visited이며 RemainingToNextMonth는 변경되지 않았기 때문에 다음 업데이트를 제외하고 변경 사항이 없습니다. 방문한 깃발을 위해. – Peter

답변

8

한 가지 : SQL 서버 트리거는

그 진술 업데이트하면 (/ 생각 가정 하지 번 행에 따라 많은 개발자) 문 당 한 번 을 발사한다

SELECT 
    @NewRemainingToNextMonth = RemainingToNextMonth, 
    @NewTotalDeduction = TotalDeduction 
FROM INSERTED 
같은 당신의 선택 - 더 한 행보다, 다음 InsertedDeleted 의사 테이블 여러 행이 포함됩니다

- 행이 선택되어야하며, 그 중 50 개가 Inserted ??

당신은 InsertedDeleted 의사 테이블에 한 번에 처리되는 여러 행을 처리 할 수있는 트리거를 다시 작성해야합니다

...에 StackOverflow에

관련 문제