PDA

View Full Version : اشکال در نوشتن یک تریگر



aliasghar
سه شنبه 12 خرداد 1383, 18:43 عصر
سلام من یک جدول به شکل زیر دارم
name ------------------ length ------------------ parent_len
---- 0 -------------------------- 1 -------------------------- گروه
---- 1 -------------------------- 4 -------------------------- کل
---- 4 -------------------------- 8 -------------------------- معین
---- 8 -------------------------- 13 ---------------------- تفضیل

( ببخشید بلد نیستم عکسی که از جدول گرفتم را اینجا بگذارم)
حال میخوام تریگری بنویسم که با پاک شدن یک رکورد ، رکوردی که parent_len ش برابر رکورد پاک شده باشه پاک کنه

مثلا با پاک کردن رکورد کل که lenght ش 4 است رکورد معین که parent_len ش 4 است پاک شود
و اینکار بصورت یک loop تا آخر بره
option های nested trigger و recursive trigger مربوط به database هم true کردم و تریگری به شکل زیر نوشتم




ALTER TRIGGER [T_D_Sath] ON dbo.Accounting_Lvl
AFTER DELETE
AS
begin
declare @Acc_Len smallint
declare @P_Len smallint

Select @Acc_Len = Lvl_Len From Deleted
Select @P_Len = Parent_Len from Deleted

Delete From dbo.Accounting_Lvl where Parent_len = @Acc_Len

end


البته میدونم متغیرهای تعریفی نیز لزومی ندارد ولی برای رفع مشکل اینکار را کردم چون هر وقت یک رکورد ( حتی آخرین رکورد ) را پاک میکنم خطا میدهد و میگوید محدودیت تریگرهای recursive تا 32 تا است

چیکار کنم

aliasghar
چهارشنبه 13 خرداد 1383, 16:52 عصر
یعنی سوال من اینقدر سخته؟

vadood
چهارشنبه 13 خرداد 1383, 18:52 عصر
تریگری که نوشتی ظاهرا مشکلی نداره. متن پیغام خطا و جدولی که روش کار می کنی را اینجا بگذار

aliasghar
پنج شنبه 14 خرداد 1383, 15:36 عصر
سلام : اینهم خطا و اسکریپت جدول


Maximum stored prosedure , function , trigger , or view nesting level exceeded (limit 32)





CREATE TABLE [dbo].[Accounting_Lvl] (
[Lvl_Name] [nvarchar] (50) COLLATE Arabic_CI_AS NOT NULL ,
[Lvl_Len] [smallint] NOT NULL ,
[Parent_len] [smallint] NOT NULL ,
[Acc_Lvl] [smallint] NOT NULL
) ON [PRIMARY]


ممنون و اینکه منتظر جواب هستم

vadood
جمعه 15 خرداد 1383, 11:56 صبح
خوب پس حتما تریگر نوشته شده (شاید هم به همراه دیگر تریگرهای موجود) 32 بار اجرا میشه، حالا چراش ممکنه این باشه که شما توی حدول 32 تا سطر به هم وابسته داری که یکیشو پاک می کنی و ...

aliasghar
جمعه 15 خرداد 1383, 13:09 عصر
شما توی حدول 32 تا سطر به هم وابسته داری که یکیشو پاک می کنی و ...

نه مهندس جان
جدول من چهار تا رکورد با همون مقادیری که در بالا نوشتم بیشتر نداره

name ------------------ length ------------------ parent_len
---- 0 -------------------------- 1 -------------------------- گروه
---- 1 -------------------------- 4 -------------------------- کل
---- 4 -------------------------- 8 -------------------------- معین
---- 8 -------------------------- 13 ---------------------- تفضیل

جالبه که اگه حتی آخرین رکورد را هم پاک کنم باز هم همین خطا را میده

vadood
شنبه 16 خرداد 1383, 13:53 عصر
من این جدول را با همان چند رکورد و تریگر شما روی سیستم خودم درست کردم و به خوبی اجرا شد. مشکل از این تریگر نیست

aliasghar
یک شنبه 17 خرداد 1383, 17:50 عصر
میشه یک بار دیگه تست کنید که اگه رکورد اول یعنی گروه را حذف کنید آیا بدون مشکل همه رکوردهای جدول پاک میشه یا نه؟

آخه اگه خصوصیت recursive trigger ست نشده باشه بدون اشکال فقط رکورد بعد یعنی کل را پاک میکنه

ممنون