You are on page 1of 8

‫‪Triggers‬‬

‫التعرٌف ‪:‬‬
‫وهً عبارة عن مجموعه من األوامر التً تنفذ بمجرد حدوث حدث‬
‫معٌن سواء على السٌرفر أو قاعدة البٌانات أو على جدول ‪.‬‬

‫األنواع ‪:‬‬
‫‪ : DML Triggers- 1‬وهً مجموعه األوامر التً تنفذ بشكل‬
‫تلقائً بمجرد حدوث اإلضافة أو الحذف أو التعدٌل على‬
‫جدول معٌن‪.‬‬

‫‪ -‬الصٌغه العامة ‪:‬‬

‫‪Create Trigger schema Name .Trigger Name‬‬


‫‪On Table | view‬‬
‫‪After | Instead of Insert/Delete/Update‬‬
‫‪As‬‬
‫‪T-sql statements‬‬
‫‪Go‬‬

‫إعداد ‪ :‬محمد الخياط – ‪mzk_tech@yahoo.com‬‬


‫‪MCITP : SQL Server 2008 Administrator‬‬
‫‪C# developer‬‬
: ‫ طرٌقة االنشاء‬-
AdenvtureWorksDW2008‫بعض الجداول المستخدمه فً األمثله موجوده بقاعدة البٌانات‬ : ‫ملحوظة‬
. ‫ على هذه القاعده‬Test ‫أٌضا سٌتم إنشاء جدول‬

Create Table dbo.Test(ProcessID int


Identity(1,1) Not Null
Primary Key,
ProcessType varchar(255) Null)

: ‫ فً حالة اإلضافة‬- 1
: After ‫ فً حالة‬-
‫ ٌتم إضافة‬DimCurrency‫فً هذه الحالة نرٌد بعد إضافة عمله جدٌدة فً جدول‬
. ‫ بشكل أوتوماتٌك‬Test‫سجل جدٌد فً جدول‬

Create Trigger dbo.AfterTrigger


On DimCurrency
After Insert
As
Insert into dbo.Test values ('After Process');
Go

‫االن بعد تنفٌذ الكود السابق ٌتم إضافة سجل جدٌد فً جدول العمالت‬
Insert into DimCurrency values ('YER','Yemen Riyal')

Test‫تم إضافة سجل جدٌد بجدول‬

mzk_tech@yahoo.com – ‫ محمد الخياط‬: ‫إعداد‬


MCITP : SQL Server 2008 Administrator
C# developer
: Instead of ‫ فً حالة‬-
‫فً هذه الحالة نرٌد عند إضافة عمله جدٌدة فً جدول العمالت ٌتم حذف سجل العمله‬
.‫ من جدول العمالت وٌتم التراجع عن إضافة العمله الجدٌدة‬USD

Create Trigger dbo.InstedOfTrigger


On DimCurrency
Instead of Insert
As
Delete from DimCurrency where CurrencyAlternateKey='Yer'
Go

‫االن بعد تنفٌذ الكود السابق ٌتم إضافة سجل جدٌد فً جدول العمالت‬

Insert into DimCurrency values ('SS',Test ss')

Yer ‫لم ٌتم االضافة وتم حذف السجل الخاص بالعمله‬

mzk_tech@yahoo.com – ‫ محمد الخياط‬: ‫إعداد‬


MCITP : SQL Server 2008 Administrator
C# developer
: ‫ فً حالة التعدٌل‬- 2
‫فً هذه الحالة نرٌد عند تعدٌل سجل فً جدول العمالت ٌتم إضافة سجلٌن فً الجدول‬
.‫ السجل األول نوع العملٌه والسجل الثانً رمز العمله التً تم تعدٌلها‬Test

Create Trigger dbo.UpdateTrigger


On DimCurrency
After Update
As
Insert into test values ('UpdateProcess')
,((Select CurrencyAlternateKey From Deleted))

Go

‫االن بعد تنفٌذ الكود السابق ٌتم تعدٌل سجل ما ولٌكن سجل عمله السعودٌة‬

Update DimCurrency
set
CurrencyAlternateKey='non',
CurrencyName='Updated'

where CurrencyAlternateKey='SAR'

‫أنظر كٌف بعد تنفٌذ الكود السابق تم التعدٌل السجل فً جدول العمالت أٌضا تم إضافة سجلٌن فً الجدول‬
Test

mzk_tech@yahoo.com – ‫ محمد الخياط‬: ‫إعداد‬


MCITP : SQL Server 2008 Administrator
C# developer
‫هناك توضٌح ‪:‬‬
‫فً حالة عمل ‪ Trigger‬على الجدول أو ‪ view‬ولٌكن نوعه ‪ Update‬أي ٌشتغل عندما أعمل تعدٌل على‬
‫أي سجل من سجالت الجدول هنا فً هذه الحالة ٌقوم‪ sql engine‬بإنشاء جدول صغٌر على الرام‬
‫مشابهه فً الحقول للجدول الذي ٌتم تعدٌل بٌاناته حٌث ٌرفع علٌه السجالت التً ٌتم تحدٌثها فً هذه‬
‫اللحظة وٌسمى ‪ Deleted‬حٌث ٌحتوي على النسخة الحالٌة للسجل أٌضا ٌقوم الــ‪ sql engine‬بإنشاء‬
‫نفس الجدول السابق بنفس المحتوٌات ولكن بنسخة جدٌدة من البٌانات وٌسمى هذا الجدول‪. Inserted‬‬
‫حٌث هذه الجدول أقدر أتعامل معها فقط داخل ال‪ Trigger‬أي فً وقت حدوث الحدث ‪ .‬نستطٌع من هذه‬
‫الجداول إضافه المحذوف فً جدول أخر ٌعنً ممكن تتعامل مع الجداول هذه بكل حرٌة ‪.‬‬
‫أما فً حالة ال‪ Deleted‬فإنه ٌتم إنشاء جدول الــ‪ Deleted‬فقط ‪.‬‬
‫وفً حالة ال‪ Insert‬فإنه ٌتم إنشاء جدول الـــ‪ Inserted‬فقط‪.‬‬

‫‪ -‬حذف وتعدٌل الـــ‪: Triggers‬‬


‫‪- 1‬الحذف ‪:‬‬
‫‪ -‬عن طرٌق ‪: object Explorer‬‬

‫‪ -‬عن طرٌق الكود ‪:‬‬

‫‪Drop trigger TriggerName‬‬

‫إعداد ‪ :‬محمد الخياط – ‪mzk_tech@yahoo.com‬‬


‫‪MCITP : SQL Server 2008 Administrator‬‬
‫‪C# developer‬‬
: ‫التعدٌل‬- 2

: object Explorer ‫ عن طرٌق‬-

: ‫ عن طرٌق الكود‬-

Alter Trigger schemaName.TriggerName


On Table | view
After | Instead of Insert/Delete/Update
As

New T-sql statements


Go

mzk_tech@yahoo.com – ‫ محمد الخياط‬: ‫إعداد‬


MCITP : SQL Server 2008 Administrator
C# developer
: Trigger‫ تشغٌل ال‬/ ‫ إٌقاف‬-
: object Explorer ‫عن طرٌق‬- 1

Trigger ‫تفعيل‬

Trigger ‫إيقاف‬

: ‫ الكود‬- 2

Disable Trigger TriggerName on TableName | viewName

Enable Trigger TriggerName on TableName | viewName

: Triggers‫ طرٌقة جلب معلومات عن الــ‬-

SELECT * FROM sys.triggers

‫ إضغط هنا‬system view ‫ولمعرفة المزٌد على هذا ال‬

) insert/ delete / update ( ‫ على جمٌع االحداث‬Trigger‫ ٌمكن إنشاء ال‬: ‫ملحوظة‬

mzk_tech@yahoo.com – ‫ محمد الخياط‬: ‫إعداد‬


MCITP : SQL Server 2008 Administrator
C# developer
mzk_tech@yahoo.com – ‫ محمد الخياط‬: ‫إعداد‬
MCITP : SQL Server 2008 Administrator
C# developer

You might also like