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

نام تاپیک: مقدار برگشتی فیلد درstoreProcedure؟؟؟

  1. #1

    Tick مقدار برگشتی فیلد درstoreProcedure؟؟؟

    سلام،

    من توی بانکم دوتا جدول دارم

    خب می خوام با کلیک بر روی یک دکمه در فرم ام: 1) یک رکورد به جدول اولیم اضافه شود. خب این جدول اولیم یک فیلد داره که خودکار پر میشه بنام "شماره نامه"
    خب من می خوام بعد از اینکه با store procedure رکوردی به جدول اولیم اضافه شد شماره نامه ی اون رکورد رو بدست بیارم و
    2)یک رکورد به جدول دومی ام اضافه کنم که یک فیلدش شماره نامه هست همین شماره نامه ی رکوردی که به جدول اولی اضافه شد.

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

    (بدون سرچ ؛ چون هیچ فیلدی بجز شماره نامه منحصر بفرد نیست+ اینکه یکی از فیلدهام هم نوعشtext هست که نمیدونم چجوری مقایسه کنم)

  2. #2
    اگر فیلد شما Identity هستش، از تابع SCOPE_IDENTITY بلافاصله بعد از Insert استفاده کنین

  3. #3
    اگر فیلد شما Identity هستش، از تابع SCOPE_IDENTITY بلافاصله بعد از Insert استفاده کنین
    بله فیلد من از نوع identifyهست،
    اما این تابعی که شما گفتید رو نمیشناسم میشه طرز استفاده از این تابع رو بگید (با مثال)

  4. #4
    بله فیلد من از نوع identifyهست

  5. #5
    سلام دوست عزیز میتوانید مقدار متغیر IDENTITY@@ را بلا فاصله بعد از دستور Insert (در تیبل identify ) در یک متغیر دیگر ذخیره کنید این متغیر مقدار فیلد identity ی تیبل را برمیگرداند و در آخر SP بنویسید (متغیر) return
    و در برنامه خودتان مقدار RETURN_VALUE@ را دریافت کنید(دلفی)
    موفق باشید

  6. #6
    سلام،
    ممنون
    یک نگاه به کدم بندازید ببینید درست متوجه شدم.
    من یک فیلد lidدارم که از نوع bigintهست و identityهم کردم و خودکار فیلدش مقدار میگیره حالا می خوام بعد از اضافه کردن مقدار lid رو برام برگردونه اما خطا میگیره

    CREATE procedure writeInteraLetter2
    (
    @matter char( 60 ),
    @createdate char( 10 ),
    @foriyat char(10),
    @matn text

    )
    As
    declare letter_id bigint
    If Exists( SELECT * FROM letters
    WHERE lmatter=@matter and lcreatedate=@createdate and lforiyat=@foriyat and lmatn like @matn)
    RETURN -1
    ELSE
    INSERT letters (
    lmatter,
    lcreatedate,
    lforiyat,
    lmatn
    )
    VALUES (
    @matter,
    @createdate,
    @foriyat,
    @matn
    )
    letter_id=@@lid
    return letter_id

    GO

  7. #7
    سلام
    اولا که کدی که گذاشتید که مطمئنا اجرا نخواهد شد ،
    اولا شما از @@Identity یا SCOPE_IDENTITY استفاده نکردید ،از کجا ای دی رکورد جدید رو به دست میارید ؟
    تو دستور انتساب از SET استفاده نکردید .
    برای برگرداندن یک مقدار در sql به 2 روش می تونید انجام بدید :
    1 - پارامتر OUTPUT : یک پارامتر را از نوع OUTPUT اعلام کنید و پس از اجزای پروسجر مقدارش رو بخونید ،البته در بدنه پروسجر باید آنرا مقدار دهی کنید .
    2 - RETURNVALUE : با استفاده از دستور Return ،که در این حالت برای استفاده از آن باید اجرای پروسجر خود را برابر با یک متغیر بگذارید یعنی اجرای پروسجر مقداری را برمیگردونه .

  8. #8
    سلام
    مرسی جواب گرفتم
    درست شد

    فقط یک سؤال:چجوری می تونم این storeProcedure رو از توی query Analyzerاجرا کنم؟؟؟
    من رویه رو از توی asp.netاجرا کردم جواب داد ...
    حالا دوست دارم بدونم چجوری از توی کوئری میتونم رویه رو اجرا و آزمایش کنم تا راحتتر باشم؟؟؟
    این کد رویه ام اگه میشه با کد نوشتن راهنمایی م کنید
    تشکر
    CREATE procedure writeInteraLetter2
    (
    @matter char( 60 ),
    @createdate char( 10 ),
    @foriyat char(10),
    @matn text

    )
    As
    DECLARE @foundUser bigint
    If Exists( SELECT * FROM letters
    WHERE lmatter=@matter and lcreatedate=@createdate and lforiyat=@foriyat and lmatn like @matn)
    RETURN -1
    ELSE
    INSERT letters (
    lmatter,
    lcreatedate,
    lforiyat,
    lmatn
    )
    VALUES (
    @matter,
    @createdate,
    @foriyat,
    @matn
    )
    set @foundUser=@@Identity
    return @foundUser
    GO

  9. #9
    سلام
    این دستورات را اجرا کنید :
    DECLARE @Return INT
    SET @Retun = EXEC EXEC writeInteraLetter2 'Master' ,'1386/.2/12' ,'12' ,'Text'
    SELECT @Return

  10. #10
    مرسی، ممنون

    ولی این پیام خطا رو داد:
    Server: Msg 156, Level 15, State 1, Line 2
    Incorrect syntax near the keyword 'EXEC'.

  11. #11
    سلام
    اشتباه از من بود ، ببخش ;)
    DECLARE @Return INT
    EXEC @Retun = writeInteraLetter2 'Master' ,'1386/.2/12' ,'12' ,'Text'
    SELECT @Return

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

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