Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > SQL Server กับ Stored Procedure สอนเขียน Stored Procedure บน SQL Server Database > ตอนที่ 15 : การสร้าง Trigger บน SQL Server Database (SQL Server : Trigger)



Clound SSD Virtual Server

ตอนที่ 15 : การสร้าง Trigger บน SQL Server Database (SQL Server : Trigger)

ตอนที่ 15 : การสร้าง Trigger บน SQL Server Database (SQL Server : Trigger) สำหรับ Trigger บน SQL Server เป็นฟีเจอร์ที่น่าสนใจมากและถ้านำมันไปใช้งานจะช่วยให้การเขียนโปรแกรมกับ SQL Server Database จะทำให้โปรแกรมนั้น ๆ มีประสิทธิภาพมากขึ้นมากเลยทีเดียว โดย Trigger นี้ เป็น Events (เหตุการณ์) ที่เกิดขึ้นกับ TABLE เช่นมีการใช้คำสั่ง INSERT, UPDATE, หรือ DELETE กับ TABLE ที่เราได้สร้าง Trigger ไว้ ก็จะทำให้ Trigger นั้นทำงานอัตโนมัติตามคำสั่ง SQL ที่เราได้เขียนไว้นั่นเอง โดย Trigger นี้สามารถเพิ่มเงื่อนไขเช่น { BEFORE | AFTER } จะให้ทำงานก่อนการเกิด Event หรือ หลังจากที่เกิด Event นั้นแล้ว รองรับ Action ทั้งหมด 3 รูปแบบคือ { INSERT | UPDATE | DELETE }

โครงสร้างของตาราง CUSTOMER, COUNTRY และ AUDIT

Table : CUSTOMER

Trigger บน SQL Server

Table : COUNTRY

Trigger บน SQL Server

Table : AUDIT

Trigger บน SQL Server

Create Trigger Syntax
CREATE TRIGGER <Schema_Name, sysname, Schema_Name>.<Trigger_Name, sysname, Trigger_Name> 
   ON  <Schema_Name, sysname, Schema_Name>.<Table_Name, sysname, Table_Name> 
   AFTER <Data_Modification_Statements, , INSERT,DELETE,UPDATE>
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for trigger here
    -- DELETED
    -- INSERTED

END

อธิบาย
INSERTED ในกรณีที่ Trigger นี้เกิดหลังจากที่ INSERT และ DELETE เราสามารถเรียก Column นั้นด้วยใช้ INSERTED.col_name
DELETED ในกรณีที่ Trigger นี้เกิดหลังจากที่ DELETE เราสามารถเรียก Column นั้นด้วยใช้ DELETED.col_name


Example 1 : ตัวอย่างการสร้าง Trigger ให้ DELETE ข้อมูลใน Table ที่เกี่ยวข้อง

MySQL Trigger

จากรูปจะเห็นว่าตาราง CUSTOMER กับ AUDIT จะมีข้อมูลที่เชื่อมโยงกันด้วย CUSTOMER_ID ซึ่งเราจะสร้าง Trigger เมื่อลบข้อมูลจาก CUSTOMER ให้มันไปลบข้อมูลใน AUDIT ด้วย








Trigger บน SQL Server

คลิกขวาที่ Trigger ของตาราง CUSTOMER เลือก New Trigger

CREATE TRIGGER DelCustomer
   ON  [CUSTOMER]
   AFTER DELETE
AS 
BEGIN
	SET NOCOUNT ON;
	
	-- Declare Variable
	DECLARE @sCustomerID VARCHAR(4);
	
	-- Get CUSTOMER_ID from delete rows
	SET @sCustomerID = (SELECT CUSTOMER_ID FROM DELETED)
	
	-- Delete related table
	DELETE FROM [AUDIT]
		WHERE CUSTOMER_ID = @sCustomerID;

END
จากคำสั่งนี้จะเห็นว่าเมื่อมีการ DELETE ที่ CUSTOMER จะสั่งให้ DELETE ที่ audit ด้วยการ CUSTOMER_ID = DELETED.CUSTOMER_ID

Trigger บน SQL Server

รายการ Trigger ที่ถูกสร้างภายใต้ตาราง CUSTOMER

Trigger บน SQL Server

ทดสอบลบหรือ DELETE ข้อมูลในตาราง customer

Trigger บน SQL Server

หลังจากที่ลบข้อมูลใน CUSTOMER จะเห็นว่าใน AUDUT ถูกลบออกไปด้วย

Trigger บน SQL Server

การ Enabled และ Disabled ตัว Trigger


Example 2 : ตัวอย่างการสร้าง Trigger ให้ INSERT/UPDATE/DELETE ข้อมูล และอัพเดดข้อมูลที่เกี่ยวข้อง

Trigger บน SQL Server

จากรูปจะเห็นว่าตาราง CUSTOMER กับ AUDIT จะมีข้อมูลที่เชื่อมโยงกันด้วย CUSTOMER_ID ใน Column ของ USED ใน CUSTOMER จะเป็นค่า SUM มาจาก AUDIT โดยในตัวอย่างนี้เราจะทำ Trigger เมื่อ (INSERT/UPDATE/DELETE) ใน AUDIT ให้ทำการ SUM แล้วอัพเดดค่า USED ใน CUSTOMER ด้วย

MySQL Trigger

สร้าง Trigger ภายใต้ AUDIT

CREATE TRIGGER [dbo].[SumUsed]
   ON  [dbo].[AUDIT]
   AFTER INSERT,UPDATE,DELETE
AS 
BEGIN
	SET NOCOUNT ON;
	
	-- Declare Variable
	DECLARE @sCustomerID VARCHAR(4);
	DECLARE @dUsed DECIMAL(18,2);
	
	-- Get CUSTOMER_ID from Insert or Update rows
	SET @sCustomerID = (SELECT CUSTOMER_ID FROM INSERTED)

	-- Get CUSTOMER_ID from delete (When @sCustomerID IS NULL)
	IF @sCustomerID IS NULL
	BEGIN
		SET @sCustomerID = (SELECT CUSTOMER_ID FROM DELETED)
	END

	-- Get SUM from insert/update AUDIT
	SET @dUsed = (SELECT SUM(USED) FROM [AUDIT] WHERE CUSTOMER_ID = @sCustomerID)
	
	-- Update USED in CUSTOMER
	UPDATE CUSTOMER SET USED = @dUsed
		WHERE CUSTOMER_ID = @sCustomerID;

END
จากคำสั่งนี้จะเห็นว่าเมื่อมีการ INSERT,UPDATE,DELETEที่ AUDIT จะสั่งให้ SUM ค่าแล้วไป UPDATE ที่ CUSTOMER

เพิ่มเติม จาก Code จะเห็นว่า INSERT,UPDATE อยู่ในเคสเดียวกันดึงจากตัวแปร INSERTED แต่ DELETE จะดึงมาจากตัวแปร DELETED

Trigger บน SQL Server

Trigger ที่ถูกสร้างภายใต้ AUDIT

Trigger บน SQL Server

ทดสอบ INSERT ขอมูล

Trigger บน SQL Server

จะเห็นว่าที่ CUSTOMER จะมีการ UPDATE คอลัมบ์ของ USED ให้อัตโนมัติ

Trigger บน SQL Server

ทดสอบ UPDATE ข้อมูล

Trigger บน SQL Server

จะเห็นว่าที่ CUSTOMER จะมีการ UPDATE คอลัมบ์ของ USED ให้อัตโนมัติ

Trigger บน SQL Server

ทดสอบ DELETE ข้อมูล

Trigger บน SQL Server

จะเห็นว่าที่ CUSTOMER จะมีการ UPDATE คอลัมบ์ของ USED ให้อัตโนมัติ








   
Share


ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท


ลองใช้ค้นหาข้อมูล


   


Bookmark.   
       
  By : ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ)
  Score Rating :  
  Create/Update Date : 2015-10-12 11:01:44 / 2017-03-24 22:35:36
  Download : No files
 Sponsored Links / Related

 
ตอนที่ 1 : รู้จักและการเขียน Stored Procedure บน SQL Server (SQL Server : Stored Procedure)
Rating :

 
ตอนที่ 2 : การสร้าง Parameters รับค่าบน Stored Procedure (SQL Server : Stored Procedure)
Rating :

 
ตอนที่ 3: การ Print และแสดงผลบน Stored Procedure (SQL Server : Stored Procedure)
Rating :

 
ตอนที่ 4 : การสร้างตัวแปร Declare Variable บน Stored Procedure (SQL Server : Stored Procedure)
Rating :

 
ตอนที่ 5 : การสร้าง Declare Table สร้างตัวแปรแบบตาราง (SQL Server : Stored Procedure)
Rating :

 
ตอนที่ 6 : การสร้าง Loop ข้อมูลบน Stored Procedure (SQL Server : Stored Procedure)
Rating :

 
ตอนที่ 7 : การใช้ Cursor บน Stored Procedure (SQL Server : Stored Procedure)
Rating :

 
ตอนที่ 8 : การใช้ If ....Else If...Else สร้างเงื่อนไข (SQL Server : Stored Procedure)
Rating :

 
ตอนที่ 9 : การใช้ Try Catch บน Stored Procedure (SQL Server : Stored Procedure)
Rating :

 
ตอนที่ 10 : การใช้ OUTPUT และ OUT เพื่อส่งค่ากลับ (SQL Server : Stored Procedure)
Rating :

 
ตอนที่ 11 : การใช้ Transaction เพื่อ Rollback และ Commit (SQL Server : Stored Procedure)
Rating :

 
ตอนที่ 12 : การใช้ Cursor ระหว่าง (Between) Stored Procedure (SQL Server : Stored Procedure)
Rating :

 
ตอนที่ 13 : การ Debug Stored Procedure บน Visual Studio 2010,2012,2013,2015 และอื่น ๆ
Rating :

 
ตอนที่ 14 : การสร้าง View Table บน SQL Server Database (SQL Server : View Table)
Rating :

 
ตอนที่ 16 : การสร้าง Function บน Server Database (SQL Server : Function)
Rating :

 
ตอนที่ 17 : PHP เรียกใช้ EXEC/CALL - SQL Server Stored Procedure ด้วย sqlsrv และ pdo
Rating :

 
ตอนที่ 18 : Visual Basic (VB.Net) เรียกใช้ EXEC SQL Server Stored Procedure
Rating :

 
ตอนที่ 19 : Java เรียกใช้ EXEC/CALL - SQL Server Stored Procedure ด้วย (JDBC)
Rating :

 
ตอนที่ 20 : Visual C# (C# .Net) เรียกใช้ EXEC/CALL - SQL Server Stored Procedure
Rating :


ThaiCreate.Com Forum


Comunity Forum Free Web Script
Jobs Freelance Free Uploads
Free Web Hosting Free Tools

สอน PHP ผ่าน Youtube ฟรี
สอน Android การเขียนโปรแกรม Android
สอน Windows Phone การเขียนโปรแกรม Windows Phone 7 และ 8
สอน iOS การเขียนโปรแกรม iPhone, iPad
สอน Java การเขียนโปรแกรม ภาษา Java
สอน Java GUI การเขียนโปรแกรม ภาษา Java GUI
สอน JSP การเขียนโปรแกรม ภาษา Java
สอน jQuery การเขียนโปรแกรม ภาษา jQuery
สอน .Net การเขียนโปรแกรม ภาษา .Net
Free Tutorial
สอน Google Maps Api
สอน Windows Service
สอน Entity Framework
สอน Android
สอน Java เขียน Java
Java GUI Swing
สอน JSP (Web App)
iOS (iPhone,iPad)
Windows Phone
Windows Azure
Windows Store
Laravel Framework
Yii PHP Framework
สอน jQuery
สอน jQuery กับ Ajax
สอน PHP OOP (Vdo)
Ajax Tutorials
SQL Tutorials
สอน SQL (Part 2)
JavaScript Tutorial
Javascript Tips
VBScript Tutorial
VBScript Validation
Microsoft Access
MySQL Tutorials
-- Stored Procedure
MariaDB Database
SQL Server Tutorial
SQL Server 2005
SQL Server 2008
SQL Server 2012
-- Stored Procedure
Oracle Database
-- Stored Procedure
SVN (Subversion)
แนวทางการทำ SEO
ปรับแต่งเว็บให้โหลดเร็ว


Hit Link
   







Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่