PDA

View Full Version : حرفه ای: تعیین اولویت برای تریگرهای با عمل یکسان وایجاد یک رکورد در یک جدول با یک فیلد id



مرتضی حمزه ئی
شنبه 26 دی 1388, 00:01 صبح
با سلام خدمت اساتید 2 تا سوال دارم که بدجوری دنبال جوابش هستم :
1- یک جدول داریم که تنها یک فیلد داره اون فیلد pk است وidentity هم هست چطوری insert داخل اون انجام بدم
2- توی sql2005 اجازه میده که برای مثلا update یا insert ,delete هرتعداد trigger داشته باشیم حالا سوالم اینه فرض کنید سه تا update نوشتم یعنی روی update سه تاتریگر دارم حالا سوال من اینه چطوری اولویت تعیین کنم برای اینکه کدام اول انجام بشه وکدام دوم الی آخر

من ازتمام اساتید کمک میخوام

sia_2007
شنبه 26 دی 1388, 12:15 عصر
تعیین این که کدام تریگر اول باشد و کدام آخر میسر است ؛ ولی من کدش را یادم رفته؛ و با توجه به این که شما 3 تا تریگر دارید به خودی خود دومی هم تعیین میشود.
اگر فرصت کردم از روی جزوه ام میبینم بهتون میگم
شرمنده

Hamid.Kad
شنبه 26 دی 1388, 12:44 عصر
یک جدول داریم که تنها یک فیلد داره اون فیلد pk است وidentity هم هست چطوری insert داخل اون انجام بدم
این دستور رو ببینید:
SET IDENTITY_INSERT table1 ON


چطوری اولویت تعیین کنم برای اینکه کدام اول انجام بشه وکدام دوم الی آخر

sp_settriggerorder
با این پروسیجر میتونید تریگر اولی و آخری رو تعیین کنید. تریگرهای غیر از اینها ترتیبشون قابل تنظیم نیست.
البته از اونجا که شما سه تا تریگر دارید میتونید ترتیبشو بصورت دقیق تنظیم کنید

مرتضی حمزه ئی
شنبه 26 دی 1388, 13:15 عصر
با سلام خدمت اساتید
شرمنده دوست عزیزمون آقای hamid.kad هستم دستتون درد نکنه لطف کردید ولی درمورد سه تریگر که اولی را با قراردادن @order =first وسومی هم که @order =last ودومی که @order =none باشه پس دومی بدینترتیب سرجای خودش انجام میشه دیگه درسته یا خیر
ممنون وشرمنده هستم

Hamid.Kad
شنبه 26 دی 1388, 13:41 عصر
بله، درست میشه

ASKaffash
شنبه 26 دی 1388, 14:00 عصر
سلام
راه آسان اینست که همه تریگر را Copy&Paste کنید بعد به ترتیب Create کنید چون الویت با ترتیب ایجاد است ولی اگر زیاد است همان SP بهتر است

sia_2007
شنبه 26 دی 1388, 15:21 عصر
خیر اولویت اجرا هیچ ربطی به نوبت ساخته شدن ندارد.

ASKaffash
یک شنبه 27 دی 1388, 11:57 صبح
خیر اولویت اجرا هیچ ربطی به نوبت ساخته شدن ندارد.
سلام
شما اصلا این موضوع را تست نکرده اید :
این مثال را اینطوری تست کنید :
دفعه اول :


Create Trigger T1_1 On T1
For Insert
As
Insert LogErr (A1,A2) Values(10,'A')
Go
Create Trigger T1_2 On T1
For Insert
As
Insert LogErr (A1,A2) Values(20,'B')


دفعه دوم :


Create Trigger T1_2 On T1
For Insert
As
Insert LogErr (A1,A2) Values(20,'B')
Go
Create Trigger T1_1 On T1
For Insert
As
Insert LogErr (A1,A2) Values(10,'A')

بعد نتیجه را ببینید

Hamid.Kad
یک شنبه 27 دی 1388, 19:18 عصر
جناب کفاش، متن زیر چیزی هست که توی TechCenter (http://technet.microsoft.com/en-us/library/ms186762.aspx) مایکروسافت اومده. پس اینکه ترتیب فایر شدن تریگرها طبق زمان ساخت اونها باشه تضمین شده نیست.

The AFTER triggers that are fired between the first and last triggers are executed in undefined order.