قسمت دوم:
ایجاد و مدیریت تریگرها:
تریگرها معمولاً با استفاده از Query Analyzer یا گزینه های موجود در Enterprise Manager ایجاد و مدیریت می شوند. یک تریگر با استفاده از عبارت Create Trigger
ایجاد می شود. در فرآیند ایجاد تریگر، تریگر بر روی یک جدول یا دید اعمال
می شود، بعد از اینکه تریگر ایجاد شد، با استفاده از عبارت Alter Trigger می توان آن را تغییر داد. با استفاده از رویه های ذخیره شده سیستمی یا Enterprise Manager می توان تریگرها را تغییرنام داده و مشاهده کرد. از عبارت Drop Trigger برای حذف یک تریگر استفاده
می شود و از عبارت Alter Table برای فعال یا غیرفعال کردن تریگرها استفاده می شود.
ایجاد تریگر:
عبارت های اصلی عبارت Create Trigger را می توان به صورت زیر خلاصه کرد:
Create Trigger trigger_name
ON table_name or view_name
FOR {INSERT,UPDATE,DELETE}
[WITH ENCRYPTION]
AS transact_sql statements
عبارت Create Trigger:
برای ایجاد تریگر با استفاده از عبارت Create Trigger نام
تریگر، بعد از این عبارت قرار می گیرد. در تریگر نمی توان نام پایگاه داده
را به عنوان یک پیشوند به نام شیء اضافه کرد بنابراین با استفاده از عبارت
USE database_name و کلمه کلیدی GO قبل از ایجاد تریگر پایگاه داده را انتخاب نمائید. GO باید بیان شود چون Create Trigger باید اولین عبارت یک دسته پرس و جو باشد.
مجوز پیش فرض برای ایجاد تریگرها به طور پیش فرض در دست صاحب جدول می باشد.
برای مثال برای ایجاد یک تریگر به نام Alerter در پایگاه داده BookShopDB می توان از کد زیر استفاده نمود.
USE BookShopDB
GO
Create trigger alerter
عبارت ON:
تریگرها را باید به یک جدول یا یک دید تخصیص داد. از عبارت ON استفاده کنید تا به تریگر بگویید بر کدام جدول یا دید اعمال شود.
مثال:
Create Trigger alerter
ON employees
یک
تریگر فقط بر یک جدول یا دید اعمال می شود. اگر باید همان تریگر را بر
جدول دیگری اعمال کنید، یک تریگر با نام دیگری ایجاد کنید که حاوی همان منطق باشد. سپس تریگر جدید را بر جدول دیگر اعمال کنید. After (گروه پیش فرض تریگر) را می توان فقط بر یک جدول اعمال کرد. گروه تریگر جدید یعنی Instead of را می توان هم بر جدول و هم بر دید اعمال کرد.
عبارت های For, After, Instead of:
وقتی تریگر ایجاد می شود، نوع رویداد تریگر باید مشخص شود. رویدادهی معتبر شامل Insert, Update, Delete
می باشند. یک تریگر می تواند به د لیل رخداد یک، دو یا هر سه رویداد
برانگیخته شود. اگر می خواهید یک تریگر در صورت رخداد همه رویدادها
برانگیخته شود Insert, Update, Delete را بعد از عبارتهای For, After یا Instead of بیاورید. رویدادها می توانند به هر تریبی لیست شوند. برای مثال برای اینکه یک تریگر به نام Alerter در صورت بروز همه رویدادها برانگیخته شود، می توان از کد زیر استفاده کرد:
Create Trigger alerter
ON employees
FOR insert,update,delete
عبارت For با عبارت After مترادف است. بنابراین کد قبلی یک تریگر از نوع After ایجاد می کند.
عبارت With Encryption:
این گزینه برای پنهان کردن محتویات یک تریگر استفاده می شود. این گزینه کاربر را از به کارگیری sp_helptext به منظور مشاهده محتویات تریگر منع می کند. تحت این شرایط، کاربران قادر به انتخاب ستون های نوع Text از جدول Syscomments نخواهند بود. (برای مثال دستور SELECT text FROM syscomments WHERE name=tablename را نمی توان به کار گرفت)، زیرا متون رمزگذاری شده اند.
عبارت AS:
پس از این عبارت مجوعه ای از دستورات SQL ذکر می شوند.
?نکته:
برخی از فرمانها را نمی توان از طریق تریگرها به اجرا درآورد. این دستورات عبارتند از:
Create, Drop, Grant, Revoke. در مقابل دستورات Select into, Truncate table, Alter table, Alter database, Update Statistics, Reconfigure, Load Database, Load Transaction و کلیه دستورات مربوط به DISK دستورات معتبری هستند.
مثال:
این مثال نحوه ایجاد یک تریگر را نشان می دهد وقتی یک Insert, Update یا Delete بر جدول Employees رخ می دهد، تریگر یک Email را به کاربری به نام BarryT می فرستد.
USE BookShopDB
GO
CREATE TRIGGER alerter
ON employees
AFTER INSERT, UPDATE, DELETE
AS
EXEC master..xp_sendmail ‘BarryT’,
‘A record was just inserted, update or deleted in the employees table.’
GO
مدیریت تریگر:
تریگرها
اشیاء پایگاه داده ای قدرتمند هستند که وقتی یک جدول یا یک دید تغییر می
کند به طور خودکار اجرا می شوند. از چندین دستور و ابزار پایگاه داده ای
برای مدیریت تریگرها استفاده می شود.
تریگرها را می توان:
ü با استفاده از Alter Trigger تغییر داد.
ü با استفاده از رویه ذخیره شده سیستمی sp_rename تغییر نام داد.
ü با پرس و جوی جداول سیستمی با استفاده از رویه های ذخیره شده سیستمی sp_help trigger و یا sp_helptext مشاهده کرد.
ü با استفاده از عبارت Drop Trigger آن ها را حذف کرد.
ü با استفاده از عبارتهای Disable Trigger و Enable Trigger (موجود در عبارت Alter Table) فعال یا غیرفعال کرد.
تغییر و تغییرنام تریگرها:
برای تغییر یک تریگر، می توان آن را حذف کرده و دوباره ایجاد کرد. راه دیگر، استفاده از عبارت Alter Trigger می باشد. ساختار عبارت Alter trigger شبیه به ساختار
Create Trigger می باشد. اما Alter Trigger، تریگر را از جداول سیستمی Syscomments و Sysobjects حذف نمی کند. مثال زیر نشان می دهد که چگونه می توان Alter را تغییر داد تا فقط به روز رسانی های جدول Employees را گزارش دهد:
Alter Trigger alerter
ON employees
AFTER UPDATE
AS
EXEC master..xp_sendmail ‘BarryT’,
‘A record was just hupdated in the employees table.;
GO
توجه داشته باشید که Update تنها رویدادی است که بعد از عبارت AFTER آمده است و این که متن موجود در پیغام Email نیز تغییر کرده است.
تغییر نام یک تریگر:
برای تغییر نام یک تریگر از رویه سیستمی ذخیره شده sp_rename استفاده می شود.
مثال زیر نحوه تغییر نام تریگر Alerter به EmpAlerter را نشان می دهد.
Sp_rename @objname=alerter, @newname=empaleter
مشاهده، حذف و غیر فعال کردن تریگرها:
وقتی یک رویه ذخیره شده ایجاد می شود، نام آن و سایر اطلاعات شناسایی آن درجدول سیستمی Sysobjects پایگاه داده جاری ذخیره می شوند.متن موجود در تریگر در جدول سیستمی Syscomments ذخیره می شود. عبارت Select زیر تمامی تریگرهایی را نشان می دهد که بر جداول پایگاه داد BookShopDB اعمال شده است.
Select * from BookShopDB.sysobjects where type=’tr’
ستون Type همیشه تریگرهایی را لیست می کند که دارای مقدار tr باشند.
نمایش خصوصیات یک تریگر:
برای نمایش خصوصیات یک تریگر از رویه سیستمی sp_help استفاده می شود.
برای مثال برای نمایش خصوصیات تمامی تریگرهای تعریف شده برای جدول Employees، کد زیر را تایپ کنید:
Sp_helpTrigger @tbname=employees
نمایش متن موجود در یک تریگر:
برای اینکه اطلاعات با سازماندهی بیشتری نمایش داده شوند، از رویه ذخیره شده سیستمی sp_helptext استفاده کنید. برای مثال برای نمایش متن موجود در تریگر با نام Alerter عبارت زیر را تایپ کنید:
Sp_helptext @objname=alerter
حذف تریگر:
حذف یک تریگر آن را از جدول سیستمی Syscomments و Sysobjects حذف می کند. از عبارت Drop Trigger
می توان برای حذف یک یا چند تریگر استفاده نمود. اگر یک جدول یا یک دیدِ
دارای تریگر را حذف کنید، تمام تریگرهای تخصیص داده شده به جدول یا دید
نیز حذف خواهند شد.
برای حذف Alerter از پایگاه داده BookShopDB کد زیر را تایپ کنید.
USER BookShopDB
DROP Trigger alerter
غیرفعال کردن تریگرها:
ممکن
است بخواهید یک تریگر یا تریگرهای مربوط به یک جدول را غیرفعال سازید. بری
مثال وقتی که می خواهید مشکل یک پایگاه داده را عیب یابی کنید یا تغییرات
یک پایگاه داده را بررسی کنید یا رویه ای را ایجاد کنید که در آن صورت
تریگر موجود بر یک جدول باید غیر فعال شود. برای غیرفعال کردن یک تریگر از عبارت Alter Table استفاده کنید. کد زیر تریگر Alter را در جدول Employees غیر فعال می کند.
Alter Table employees Disable Trigger alerter
برای غیرفعال کردن همه تریگرهای موجود در یک جدول، بعد از عبارت Disable Trigger از کلمه کلیدی All استفاده کنید. برای فعال کردن یک یا همه تریگرها در عبارت Alter table، Disable را به Enable تغییر دهید.