مفهوم تریگر ها :
فرض کنید بخواهید مقدار فیلد شماره درس را
در جدول Course تغییر دهید یا حذف کنید . ممکن است این مقدار در جدول
Grade وجود داشته باشد . در این صورت ، اگر مقدار شماره درس در جدول
course تغییر کند یا حذف شود ، اطلاعات جدول Grade که این شماره درس را
دارند ، به رکوردهای نا معتبر تبدیل خواهند شد . به عنوان مثال دیگر ،
فرض کنید شماره درسی را در جدول grade وارد کنید ، ولی این شماره درس
در جدول Course موجود نیست . برای جلوگیری از این این مشکلات می توانید
از تریگر ها استفاده کنید .ترگر ها ، نوع خاصی از رویه های ذخیره شده
اند که در هنگام تغییر داده های جدول برای محافظت از طراحی بانک
اطلاعاتی فعال می شوند و از ورود داده های نا معتبر جلوگیری می کنند.
دو تفاوت بین ترگر ها و رویه های ذخیره شده :
۱-
تریگر ها فاقد پارامتر
هستند . ولی رویه های ذخیره شده می توانند پارامتر داشته باشد .
۲-
تریگر ها در هنگام تغییر
داده های جدول فعال می شوند ، ولی رویه های ذخیره های ذخیره شده حتما
باید فراخوانی شوند تا اجرا گردند.
هر جدول می تواند حداکثر
۳ تریگر داشته باشد که عبارتند از :
o
تریگر در هنگام اضافه
کردن رکورد (Insert
)
o تریگر در هنگام به روز
رسانی رکورد (
Update )
o تریگر در هنگام حذف
رکورد ( Delete
)
به طور پیش فرض ، کلیه
تریگر های جدول پس از تغییرات جدول فعال می شوند . این تریگر ها AFTER نام دارند . تریگر های دیگری نیز وجود دارند که INSTEAD OF
نامیده می شوند و به جای تغییر در داده های مورد نظر ، باعث فعال سازی
خودشان می شوند . در SQL SERVER
تریگر ها از دو جدول Inserted
و Deleted
استفاده می کنند . این جداول
مضابه ساختار جدول پایه ای است که تریگر ، برای آن جدول ایجاد شده است.
اگر کوردی به جدول اضافه کنید ، این رکورد علاوه بر این که در جدول
پایه اضافه می شوند ، در جدول Inserted
نیز اصافه خواهند شد . اگر رکوردی را در جدول پایه تغییر دهید ، این
رکورد از جدول پایه حذف به جدول Deleted
اضافه خواهد شد . رکورد جدید به جدول پایه و جدول Inserted اضافه می شود.
نکته :
تریگر ها ، توابع بسیار خوبی
برای استفاده هستند و جامعیت بانک اطلاعاتی را بررسی می کنند ، اما
موجب افزایش I/O می گردند.
ایجاد تریگر ها در SQL Server
-
CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [
, ] [ UPDATE ] }
[ WITH APPEND ]
[
NOT FOR REPLICATION ]
AS
[ { IF UPDATE (
column )
[ { AND | OR } UPDATE
( column ) ]
[ ...n ]
| IF ( COLUMNS_UPDATED ( ) {
bitwise_operator } updated_bitmask )
{ comparison_operator } column_bitmask
[ ...n ]
} ]
sql_statement [
...n ]
}
}
trigger_name :
نام تریگر را مشخص می کنند
ON
{ table | view }:
جدول
یا دیدگاهی که تریگر برای ان ایجاد می شود را مشخص می کند که می تواند یک
از جداول بانک یا دیدگه ها باشد.
{ { FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] }
{ FOR | AFTER | INSTEAD OF }
:
مشخص
می کند که تریگر در چه زمانی اجر شود قبل از عمل ، بعد از عمل یا به جای
عمل ..
{ [
INSERT ] [ , ] [ UPDATE ] } :
مشخص می کند که برای کدام عمل اصلی اعمال شود که
می تواند مقادیر (INSERT , UPDATE , DELETE)
باشد
اما قسمت اول
sql_statement
[ ...n ] :
مجموعه دستوراتی که باید انجام شود
را نگه می دارد
مثال :
ایجاد تریگری به نام tr_delete که در هنگام حذف
رکوردی از جدول type فعال شود.
Create
Trigger tr_delete
ON type
FOR DELETE AS
Raiserror('%d record delete ' ,0,1,@@rowcount)
ایجاد تریگری برای به نام tr_delete1 که
به جای عملیات delete جدول type فعال می شود.
Create
Trigger tr_delete1
On type
INSTEAD OF delete AS
Delete from temp where id=@@identity
ایجاد تریگری به نام tr_InUp که در هنگام اضافه
کردن و یا ویرایش رکورد فعال می شود.
Create Trigger tr_InUp
ON type
FOR INSERT , UPDATE
AS
Raiserror('%d redord inserted or
updateted',0,1,@@rowcount)
تغییر
تریگر در بانک اطلاعاتی SQL Server
برای این منظور از دستور ALTER TRIGGER استفاده
کنید.
ALTER TRIGGER trigger_name
ON (
table | view )
[ WITH ENCRYPTION ]
{
{ (
FOR | AFTER | INSTEAD OF ) { [ DELETE ] [ , ] [ INSERT
] [ , ] [ UPDATE ] }
[ NOT FOR REPLICATION ]
AS
sql_statement [ ...n ]
}
یا
{ ( FOR |
AFTER | INSTEAD OF ) { [ INSERT ] [ , ] [ UPDATE ] }
[ NOT FOR REPLICATION ]
AS
{ IF UPDATE
( column )
[ { AND | OR } UPDATE (
column ) ]
[ ...n ]
|
IF ( COLUMNS_UPDATED ( ) { bitwise_operator }
updated_bitmask )
{ comparison_operator }
column_bitmask [ ...n ]
}
sql_statement
[ ...n ]
}
}
trigger_name
:
نام تریگر را مشخص می کنند.
ON
{ table | view }:
جدول
یا دیدگاهی که تریگر برای ان ایجاد می شود را مشخص می کند که می تواند یک
از جداول بانک یا دیدگه ها باشد.
{ { FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] }
{ FOR | AFTER | INSTEAD OF }
:
مشخص می کند که تریگر در چه زمانی اجر شود قبل
از عمل ، بعد از عمل یا به جای عمل ..
{ [ INSERT ] [ , ] [ UPDATE ] }
:
مشخص
می کند که برای کدام عمل اصلی اعمال شود که
می تواند مقادیر (INSERT , UPDATE , DELETE)
باشد
اما قسمت اول
sql_statement [ ...n ]
:
مثال :
دستوراتی که عملکرد تریگر tr_delete را تغییر میدهد به طوری که
رکوردی را از جدول student حذف کرده و پیغامی به کاربر نمایش می دهد.
Alter Trigger tr_delete
On Student
FOR DELETE
AS
PRINT ('record deleted')
حذف
تریگر :
برای
این منظور از دستور DROP TRIGGER استفاده کنید.
DROP TRIGGER { trigger}[,…n]
Trigger…n
: تریگر هایی هستند که باید
حذف شوند
مثال :
دستوراتی که تریگر tr_delete
tr_InUp, را حذف می کند.
DROP
TRIGGER tr_delete , tr_InUp