نمایش نتایج 1 تا 8 از 8

نام تاپیک: اشکال در نوشتن یک تریگر

  1. #1
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    195

    اشکال در نوشتن یک تریگر

    سلام من یک جدول به شکل زیر دارم
    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 تا است

    چیکار کنم

  2. #2
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    195
    یعنی سوال من اینقدر سخته؟

  3. #3
    کاربر دائمی آواتار vadood
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    تهران
    پست
    858
    تریگری که نوشتی ظاهرا مشکلی نداره. متن پیغام خطا و جدولی که روش کار می کنی را اینجا بگذار

  4. #4
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    195
    سلام : اینهم خطا و اسکریپت جدول

    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]


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

  5. #5
    کاربر دائمی آواتار vadood
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    تهران
    پست
    858
    خوب پس حتما تریگر نوشته شده (شاید هم به همراه دیگر تریگرهای موجود) 32 بار اجرا میشه، حالا چراش ممکنه این باشه که شما توی حدول 32 تا سطر به هم وابسته داری که یکیشو پاک می کنی و ...

  6. #6
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    195
    شما توی حدول 32 تا سطر به هم وابسته داری که یکیشو پاک می کنی و ...
    نه مهندس جان
    جدول من چهار تا رکورد با همون مقادیری که در بالا نوشتم بیشتر نداره
    name ------------------ length ------------------ parent_len
    ---- 0 -------------------------- 1 -------------------------- گروه
    ---- 1 -------------------------- 4 -------------------------- کل
    ---- 4 -------------------------- 8 -------------------------- معین
    ---- 8 -------------------------- 13 ---------------------- تفضیل
    جالبه که اگه حتی آخرین رکورد را هم پاک کنم باز هم همین خطا را میده

  7. #7
    کاربر دائمی آواتار vadood
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    تهران
    پست
    858
    من این جدول را با همان چند رکورد و تریگر شما روی سیستم خودم درست کردم و به خوبی اجرا شد. مشکل از این تریگر نیست

  8. #8
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    195
    میشه یک بار دیگه تست کنید که اگه رکورد اول یعنی گروه را حذف کنید آیا بدون مشکل همه رکوردهای جدول پاک میشه یا نه؟

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

    ممنون

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •