تریگر (Trigger) چیست ؟
پنجشنبه 26 اردیبهشت 1392تریگر (Trigger) چیست ؟ <br/> Trigger نوعی رویه ذخیره شده است که پس از یک رویداد اجرا می شود ، برخلاف Stored Procedure که حتما باید فراخوانی شود Trigger ها قابل فراخوانی نبوده و به صورت خودکار در واکنش به اعمال Insert , Update , Delete (قبل یا بعد از تراکنش) اجرا می شوند .
Trigger نوعی رویه ذخیره شده است که پس از یک رویداد اجرا می شود ، برخلاف Stored Procedure که حتما باید فراخوانی شود Trigger ها قابل فراخوانی نبوده و به صورت خودکار در واکنش به اعمال Insert , Update , Delete (قبل یا بعد از تراکنش) اجرا می شوند . واضح است که چنین رویه بر خلاف SP نمیتواند پارامتر ورود و خروجی بپذیرد و اطلاعات خود را از رکورد مورد نظر (رکوردی که Insert , Update یا Delete بر روی آن صورت گرفته که اصطلاحا Updated , Inserted و Deleted خوانده می شود) مهمترین کاربر Trigger ها به شرح زیر است : برای ایجاد یک Trigger مطابق شکل زیر عمل کنید :
همانطور که ملاحظه می کنید فرمت یک Trigger در سمت راست نمایش داده شده است ، پس از واژه Create trigger نام Trigger ذکر شده و سپس واژه On و پس از آن نام جدولی که مد نظر ماست ذکر می شود ، سپس واژه After و یکی از تراکنش های Insert , Delte یا Update و سپس کدها ما پس از Begin قرار خواهد گرفت . برای نمونه کد مثال اول را به صورت زیر می نویسیم :
پس نوشتن کد فوق دکمه Execute را بفشارید تا Trigger ایجاد شود ، برای ویرایش آن هم میتوانید روی Trigger کلیک راست کرده و گزینه Alter را انتخاب کنید همانطور که ملاحظه می کنید برای بدست آوردن کد کاربری که حذف شده است از یک دستور Select ساده استفاده کرده ام ، نکته مهم اینجاست که به جای نام جدول از کلمه "Deleted" استفاده شده یعنی "رکورد (یا رکوردهای) حذف شده" ، این قضیه برای Insert و Update نیز صادق است یعنی "Inserted" و "Updated" ، سپس مقدار بدست آمده از دستور Select را در یک متغیر به نام UserID@ ذخیره کرده و در شرط حذف از آن استفاده کردیم . از این پس هر رکوردی از جدول TBLUsersحذف شود تمام رکوردهای جدول TBLBlogs نیز حذف خواهد شد البته در این مثال میتوانستیم از Relation ها جهت این عمل استفاده کنیم ولی در بسیاری از شرایط بین بسیاری از جداول Relation وجود ندارد ولی ما میخواهیم تراکنش ها روی سایر جداول نیز تاثیر بگذارند ، بنابراین نیاز به Trigger ها امری مشخص است . برخی از برنامه نویسان به جای استفاده از Trigger این اعمال را در لایه Bussiness Logic انجام می دهند (مثلا پس از یک تراکنش یک Query دیگر اجرا می کنند ) ، این کار با افزایش تعداد تراکنش ها باعث افت کارایی سیستم خواهد شد . برای مشاهده مثال های بیشتر میتوانید صفحه زیر را مطالعه بفرمایید :
به دلیل اینکه Trigger ها خیلی سریع عمل می کنند برای ما بسیار سودمند خواهند بود ، برای روش شدن مطلب چند مثال میزنم :
http://msdn.microsoft.com/en-us/library/aa258254%28SQL.80%29.aspx
- SQL Server
- 19k بازدید
- 2 تشکر