อะไรคือความแตกต่างระหว่างFOR
และAFTER
ทริกเกอร์?
อะไรคือความแตกต่างระหว่างFOR
และAFTER
ทริกเกอร์?
คำตอบ:
ไม่มีความแตกต่างพวกเขาทำสิ่งเดียวกัน
CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE
ก็เหมือนกับ
CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE
INSTEAD OF
ทริกเกอร์ที่แตกต่างกันและไฟก่อนและแทนการแทรกและสามารถนำมาใช้ในมุมมองในการสั่งซื้อที่จะแทรกค่าที่เหมาะสมลงในตารางพื้นฐาน
@ เบ็นเป๊ะเลย
นี่คือบทความ MSDN การสำรวจ SQL Server Triggers
ย่อหน้าจากบทความ:
ไวยากรณ์นั้นเป็นที่ยอมรับใน SQL Server เวอร์ชันเก่า อย่างไรก็ตามตอนนี้มีทริกเกอร์สองประเภทใน SQL Server 2000 ฉันต้องการอ้างถึงทริกเกอร์ FOR เป็นทริกเกอร์หลัง ดังนั้นสำหรับส่วนที่เหลือของบทความนี้ฉันจะอ้างถึงทริกเกอร์หลังหรือแทน
เช่นเดียวกับทริกเกอร์ AFTER ที่คุณเห็นก่อนหน้านี้ทริกเกอร์นี้จะป้องกันไม่ให้เกิดการเปลี่ยนแปลงกับฟิลด์นามสกุล อย่างไรก็ตามกฎนี้ใช้กฎทางธุรกิจที่แตกต่างจากตัวอย่างก่อนหน้านี้ เนื่องจากทริกเกอร์ INSTEAD OF เริ่มทำงานแทนคำสั่ง UPDATE ทริกเกอร์ INSTEAD OF จึงประเมินว่าการทดสอบกฎทางธุรกิจผ่านหรือไม่ หากการทดสอบกฎทางธุรกิจผ่านไปเพื่อให้การอัปเดตเกิดขึ้นทริกเกอร์ INSTEAD OF จะต้องเรียกใช้คำสั่ง UPDATE อย่างชัดเจนอีกครั้ง
AFTER ระบุว่าทริกเกอร์ DML จะเริ่มทำงานก็ต่อเมื่อการดำเนินการทั้งหมดที่ระบุในคำสั่ง SQL ทริกเกอร์ดำเนินการสำเร็จ การดำเนินการเรียงซ้อนอ้างอิงและการตรวจสอบข้อ จำกัด ทั้งหมดจะต้องสำเร็จก่อนที่ทริกเกอร์นี้จะเริ่มทำงาน AFTER เป็นค่าเริ่มต้นเมื่อ FOR เป็นคำหลักเดียวที่ระบุ
ไม่สามารถกำหนด AFTER ทริกเกอร์บนมุมมองได้
INSTEAD OF ระบุว่าทริกเกอร์ DML ถูกเรียกใช้งานแทนคำสั่ง SQL ที่ทริกเกอร์ดังนั้นการลบล้างการกระทำของคำสั่งทริกเกอร์ ไม่สามารถระบุ INSTEAD OF สำหรับทริกเกอร์ DDL หรือล็อกออน
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql