subject:{ CREATE | ALTER } TRIGGERS
syntax:{ CREATE | ALTER } TRIGGERS triggers_name
ON { table_name | view_name }
[ WITH ENCRYPTION ]
{ FOR | AFTER | INSTEAD OF }
{ [ DELETE ] [,] [ INSERT ] [,] [ UPDATE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
<sql_statement>
// [ IF UPDATE(column_name) ] ใช้ตรวจสอบว่ามีการเปลี่ยนแปลงที่ คอลัมน์ ที่กำหนด หรือไม่
content:คำสั่ง ROLLBACK TRANSACTION สามารถใช้ใน Trigger ได้
เพราะว่า การทำงานของ Trigger จะมีการใช้คำสั่ง Begin Transaction ก่อนการทำงาน
และคำสั่ง Commit Transaction หลังการทำงานภายในตัว Trigger เองอยู่แล้ว
example:-- ex 1
CREATE TABLE tbl_orders
(
id int IDENTITY NOT NULL,
price money NOT NULL
)
GO
CREATE TRIGGERS trg_orders
ON orders
FOR INSERT, UPDATE
AS
PRINT "Occurs Modify Data In Orders Table."
GO
-- ex 2
CREATE TRIGGERS trg_InsUpdPerson
ON Person
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @age int
SELECT @age = a.age
FROM inserted AS a
IF @age < 0
BEGIN
ROLLBACK TRANSACTION
END
END
-- ex 3
CREATE TRIGGERS trg_UpdPerson
> 100 ) > 0
BEGIN
ROLLBACK TRANSACTION
END
END
-- ex 5
CREATE TRIGGERS trg_DelPerson
ON Person
FOR DELETE
AS
BEGIN
DELETE User
FROM deleted AS a
WHERE User.person_id = a.id
// เป็นการ CASCADING DELETE
END
-- ex 6
CREATE VIEW vw_detailUser
AS
BEGIN
SELECT
a.id
, a.name
, b.firstname
, b.lastname
, b.sex
FROM
user a
LEFT OUTER JOIN person b ON a.person_id = b.id
END
GO
CREATE TRIGGERS trg_InsViewDetailUser
ON vw_detailUser
INSTEAD OF INSERT
AS
BEGIN
IF ( SELECT COUNT(*) FROM inserted ) > 0
BEGIN
INSERT INTO person ( firstname, lastname, sex )
SELECT a.firstname, a.lastname, a.sex
FROM inserted a
INSERT INTO user ( name )
SELECT a.name
FROM inserted a
END
END