PDA

View Full Version : triggerها



ali1381
شنبه 18 آذر 1385, 14:39 عصر
سلام
اگه ممکنه یکی در مورد triggerها توضیح بده . اینکه چی هستن و چه کارایی دارند؟
ممنون می شم :متفکر:

محمد دادودنیا
شنبه 18 آذر 1385, 22:02 عصر
Trigger ها روتین های هستند که می توانید ایجاد کنید و آنها رو به Table یا View های خودتون ربط بدید(البته برای View ها یکی از ترایگر ها رو می تونی به کار ببری)

حالا چکار می کنه
شما می تونید داخل ترایگر به SQL server بفهمونید که می خواهید مثلا وقتی داده ای در بانک شما Insert شده یا Update*یا Delete SQL Server چکار بکنه مثلا اجازه حذف بده یا نده یا مثا یه پپغام بده یا ....

نکته :استفاده کردن از ترایگرها رو توصیه نمی کنم مگر در حالتهای خاص یا منحصر بفرد چون واقعا روی سرعت شما تاثیر می زاره حتی اگر بهترین کد رو هم نوشته باشید

اگر اطاعات بشتری در مورد ترایگر ها می خواهید می تونید
1- از Help خود SQL Server یا مثالهای که در قسمت New==>Query Analizer استفاده کنی که خیلی هم ساده توضیح داده
2- کتاب آموزش SQL Server* (آموزش در 21 روز بنظرم اتشارات ناقوس ) یا منابع دیگه ای که توی بازار فراوان هستند
3-Search Google یا ...

zerobit-ltd
جمعه 08 دی 1385, 11:40 صبح
به نظر من Trriger زیاد به درد نمی خوره. چون همون طور که آقای دادودنیا گفتن، سرعت رو به شدت کاهش میده. تمام کارهایی رو که یک Trigger میخواد انجام بده رو می تونیم تو همون SP که Insert یا Update میکنه انجام بدیم با سرعت بالا.
به نظر من فقط وقتی از Trigger استفاده کن که میخوای داده ها رو دستی وارد کنی که باز هم میتونی از constraint ها استفاده کنی.

AminSobati
جمعه 08 دی 1385, 15:51 عصر
در جائیکه قوائد Data Integrity رو بوسیله Constraintها میتونیم کنترل کنیم، از هیچ نوع کد نویسی مثل SP یا Trigger استفاده نمیکنیم. بعضا حالتهایی وجود داره که ممکنه از چند جای مختلف اطلاعات وارد جدول بشه، نه الزاما از طریق SP که ما نوشتیم، لذا Trigger تنها جایی هستش که میشه ورود اطلاعات رو کنترل کرد. در غیر اینصورت کنترلها در SP هم قابل انجامه همونطور که دوستان توضیح دادند. اما فراموش نکنید که همه کار رو توسط Constraintها نمیتونین انجام بدین

محسن بابائی
جمعه 08 دی 1385, 20:00 عصر
این نکته که تریگر سرعت را کاهش میده به نظر من درست نیست .
به فرض که موقع درج بخواهیم یه کار دیگر هم انجام بدیم به نظر شما تریگری که ناظر برعمل درج است سرعتش بیشتره یا یه sp که باید صداش زد و شاید کلی پارامتر هم بهش فرستاد .
هر پردازشی نیاز به زمان داره و انجام تریگر هم زمان می بره به همین خاطر دوستان فکر می کنن تریگر سرعت را کاهش میده.
البته که باید به موقع از آنها استفاده کرد .

استادان SQL بی ادبی بنده را ببخشید.

majid_afra222
جمعه 08 دی 1385, 20:48 عصر
سلام
تو SQL Server 2005 برای ستونها اگه constraint و trigger نتونست کمکتون کنه و شرایط پیچیده تر و یا واقعی تری رو لازم داشتید، می تونید از SQL-CLR استفاده کنید.

AminSobati
جمعه 08 دی 1385, 21:28 عصر
این نکته که تریگر سرعت را کاهش میده به نظر من درست نیست .
به فرض که موقع درج بخواهیم یه کار دیگر هم انجام بدیم به نظر شما تریگری که ناظر برعمل درج است سرعتش بیشتره یا یه sp که باید صداش زد و شاید کلی پارامتر هم بهش فرستاد .
هر پردازشی نیاز به زمان داره و انجام تریگر هم زمان می بره به همین خاطر دوستان فکر می کنن تریگر سرعت را کاهش میده.
البته که باید به موقع از آنها استفاده کرد .

استادان SQL بی ادبی بنده را ببخشید.

در حقیقت کد TSQL که در Trigger اجرا میشه فرقی با SP نداره، حتی برای هردوتاشون Execution Plan بدست میاد. تنها چیزی که شاید Cost رو برای Trigger کمی افزایش بده این هست که جداول مجازی Inserted و Deleted باید آماده بشن. در حالیکه ممکنه کار مورد نظر رو در SPی که Insert میکنه هم بشه انجام داد. در کل من هم موافق این نیستم که Trigger رو از پایه و اساس دشمن Performance بدونیم! ولی باید در جای درستش استفاده بشه. کاربردهای مهم Trigger همونطور که در پست قبلی هم اشاره کردم:
1) زمانی که اطلاعات از Sourceهای مختلف وارد جدول میشن (یا ویرایش به طور کلی) و اینجا Trigger آخرین ایستگاه بازرسی شماست که میتونین داشته باشید. چون همه ممکنه از SPها یا Classهای شما اطلاعات رو ویرایش نکنند که بتونین کنترل کنین.
2) زمانی که اطلاعات به طور دسته ای (Batch) ویرایش میشن و دسترسی به جداول Inserted و Deleted حیاتی باشه