UPDATE 및 INSERT 에서 다른 테이블에 행을 추가 하는 테이블 트리거가 있습니다. 4 개의 열 중 하나가 변경된 경우에만 행을 추가하면됩니다. 변경 사항을 테스트하기 위해 IF UPDATE (col)을 사용해 보았지만 사각 지대가 있습니다. 그것은 단지 어떤 가치가 들어 왔는지를 테스트합니다. 나는 더 깊이 들어가야합니다. 나는 진정한 변화가 일어 났는지보기 위해 이전과 새로운 가치를 비교해야합니다. INSERT 및 UPDATE와 함께 작동해야합니다.
UPDATE의 경우 삽입 된 테이블과 삭제 된 테이블 모두 트리거 내에서 비교할 수있는 값을 가지고 있기 때문에 쉽습니다. 그러나 INSERT의 경우 삽입 테이블에만 값이 있습니다. 동일한 트리거 에서이 모든 것이 필요하기 때문에 해당 삽입 사례를 어떻게 처리합니까?
수정하려는 트리거 스크립트는 다음과 같습니다.
ALTER TRIGGER [dbo].[trATPerson_alter]
ON [mydb].[dbo].[AT_Person]
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;
-- Not all updates require a push
IF (UPDATE([First_Name]) OR UPDATE([Last_Name]) OR UPDATE([JobCode]) OR UPDATE([Inactive]))
BEGIN
INSERT INTO [mydb].[dbo].[AT_Person_To_Push] (
[Facility],
[VendorID],
[Person_code],
[First_Name],
[Last_Name],
[JobCode],
[Alink],
[Inactive]
)
SELECT [Facility],
[VendorID],
[Person_code],
[First_Name],
[Last_Name],
[JobCode],
[Alink],
[Inactive]
FROM inserted
END
END
2
"IF UPDATE (<column>)"사용에 대한 간단한 설명입니다. 값이 실제로 변경되었는지 여부에 관계없이 DML이 열의 값을 지정하면 true를 반환합니다.
—
Jonathan Fite