ผู้เขียนได้ทดลองสร้าง Trigger แบบง่ายๆให้เห็นถึงลักษณะการทำงาน
และการประยุคใช้ไปแล้ว คราวนี้ผู้เขียนจะทำตัวอย่างง่ายๆในการประยุคใช้กับ
View
ประโยชน์ของการประยุคใช้ Trigger กับ View
โดยปกติแล้ว View จะไม่สามารถเพิ่มข้อมูลได้ เพราะ View นั้นเกิดมาจากการทำ
Relation ระหว่าง Table ขึ้นมา เพื่อนำไปใช้งานแบบ Read Only อย่างเดียว
จึงเป็นหน้าที่ของโปรแกรมเมอร์ที่จะต้องเขียนคำสั่ง Insert
เข้ามาจากโปรแกรมเอง แต่หากไม่เขียนคำสั่งในโปรแกรมก็สามารถเขียน Trigger
ใส่ใน View ได้เลย และใช้ได้เหมือนกัน แบบของ Trigger ที่ใช้ก็คือ INSTEAD
OF INSERT หรือเมื่อมีการใส่ข้อมูล
ผู้เขียนได้ใช้ Table CARSALE จากตอนที่แล้ว และสร้าง Table CARBRAND เพิ่มขึ้นมา
CARBRAND |
SELECT dbo.CARBRAND.BRAND, dbo.CARBRAND.MODEL, dbo.CARSALE.SHOWROOM
FROM dbo.CARBRAND INNER JOIN
dbo.CARSALE ON UPPER(dbo.CARBRAND.MODEL) = UPPER(dbo.CARSALE.MODEL)
VIEW_CARBRAND |
CREATE TRIGGER insertToVIEW_CARBRAND
ON VIEW_CARBRAND
INSTEAD OF INSERT
AS
BEGIN
--เพิ่ม MODEL ให้กับ Table CARSALE
INSERT INTO CARSALE(MODEL)
SELECT UPPER(MODEL) FROM INSERTED
--เพิ่ม MODEL , BRAND ให้กับ Table CARBRAND
INSERT INTO CARBRAND
SELECT UPPER(MODEL),UPPER(BRAND) FROM INSERTED
END
จากนั้น Execute Trigger แล้ว ทดสอบใส่ค่า BRAND และ MODEL ที่ VIEW_CARBRAND
VIEW_CARBRAND |
ข้อมูลของ Table CARBRAND ที่เพิ่มค่าผ่าน VIEW_CARBRAND เป็นผลมาจาก Trigger |
ข้อมูลของ Table CARSALE ที่เพิ่มค่าผ่าน VIEW_CARBRAND เป็นผลมาจาก Trigger |
การทำงานในฝั่ง Server ก็จะลดเวลา และข้อผิดพลาดในการส่งข้อมูลได้มาก ทำให้โปรแกรมที่พัฒนาขึ้นมีความเสถียรขึ้นด้วย
โครงสร้างของ Table และ View
CREATE TABLE [dbo].[CARSALE](
[ID] [int] NULL,
[MODEL] [varchar](30) NOT NULL,
[SHOWROOM] [varchar](50) NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[CARBRAND](
[MODEL] [varchar](30) NULL,
[BRAND] [varchar](30) NULL
) ON [PRIMARY]
CREATE VIEW [dbo].[VIEW_CARBRAND]
AS
SELECT dbo.CARBRAND.BRAND, dbo.CARBRAND.MODEL, dbo.CARSALE.SHOWROOM
FROM dbo.CARBRAND INNER JOIN
dbo.CARSALE ON UPPER(dbo.CARBRAND.MODEL) = UPPER(dbo.CARSALE.MODEL)
0 ความคิดเห็น:
แสดงความคิดเห็น