ฉันมีตารางทริกเกอร์ใน UPDATE และ INSERTที่เพิ่มแถวไปยังตารางอื่น จะต้องเพิ่มแถวต่อเมื่อมีการเปลี่ยนแปลงหนึ่งในสี่คอลัมน์ ฉันลองใช้ IF UPDATE (col) เพื่อทดสอบการเปลี่ยนแปลง แต่มีจุดบอด แค่ทดสอบว่ามีค่าบางอย่างเข้ามาฉันต้องไปให้ลึกกว่านี้ฉันต้องเปรียบเทียบค่าเก่ากับค่าใหม่เพื่อดูการเปลี่ยนแปลงที่แท้จริงเกิดขึ้น มันต้องทำงานกับทั้ง INSERT และ UPDATE
ในกรณีของ UPDATE นั้นง่ายเพราะทั้งตารางที่ถูกแทรกและถูกลบมีค่าที่ฉันสามารถเปรียบเทียบได้ภายในทริกเกอร์ อย่างไรก็ตามสำหรับ INSERT เฉพาะตารางแทรกเท่านั้นที่มีค่า เพราะฉันต้องการทั้งหมดนี้ในทริกเกอร์เดียวกันฉันจะจัดการกรณี 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