ورود

View Full Version : سوال: Fire a trigger inside the trigger



Mahyaa
سه شنبه 29 اردیبهشت 1388, 13:14 عصر
من یک Trigeer دارم که برای Update رکورد هست. به شکل خلاصه اگر بخوام بگم جدولی که این Trigger براش تعریف شده شامل این فیلدهاست :


Id int
Name varchar(30)
ParentId int
IsDone bit
در این تریگر هر وفت فیلد IsDone = 1 شد ، رکوردی رو که ID آن برابر ParentId رکورد جاری باشه رو هم Edit میکنه و فیلد IsDone اون رو هم برابر 1 میکنه.

تا اینجا مشکلی نیست.

من فکر میکردم که با ویرایش رکورد دومی هم (که داخل خود تریگر انجام میشه) Triggrer دوباره Fire میشه. ولی در عمل این اتفاق نمی افته!

کسی میتونه بگه علتش چیه و چه کار میتونم بکنم ؟

دیتا بیس : SQL Server 2005


امیدوارم توضیحاتم واضح باشه!

DataMaster
سه شنبه 29 اردیبهشت 1388, 14:45 عصر
تا جايي كه من مي دونم اينجوري نيست
چون اينجوري باعث ميشه تريگر تا بي نهايت اجرا بشه
به ازاي هر مثلا ويرايش تريگر اجرا ميشه و در هنگام اجراي تريگر ، ديگه حالت ركرسيو نداريم

Mahyaa
سه شنبه 29 اردیبهشت 1388, 15:12 عصر
راهی نداره این رو دستی کنترل کنیم ؟
چیزی شبیه به Row-Level و Statement-Level در SQL Server نداریم؟

amin_alexi
چهارشنبه 30 اردیبهشت 1388, 10:21 صبح
سلام
در حالت پیش فرض حالت Recursive برای Trigger غیر فعاله !
می تونی با این دستورات فعال و غیر فعال

-- Enable
EXEC sp_configure 'nested triggers', 1
RECONFIGURE
-- disable
EXEC sp_configure 'nested triggers', 0
RECONFIGURE
ببین کار می کنه
من Trigger نداشتم تا این کار رو تست بکنم !

cs_mania
پنج شنبه 31 اردیبهشت 1388, 15:33 عصر
منم این مشکل رو دارم. می خوام با تغییر یک فیلد جدولم ، table هایی هم که با این table ، ارتباط دارند Update شوند. فکر کنم باید trigger رو طوری تعریف کنیم که وقتی این فیلد خاص تغییر کرد ، table های دیگر را هم update کند . فقط نمی دونم با update آنها از داخل این Trigger ، تریگر های مربوط به Event update آن ها هم Fire می شود یا نه؟ اگر هر trigger دیگری را صدا کنه مشکل حل میشه فکر کنم.