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

نام تاپیک: آخرین فیلد کلید درج شده Identity

  1. #1

    آخرین فیلد کلید درج شده Identity

    سلام
    من یک جدول دارم که این جدول دارای 3 فیلد id, fname, lname هست و فیلد id از نوع int و primary key و identity است. و فرمی که به sqldatasorse وصل شده فقط دارای دو textbox برای ورود fname و lname است. یعنی موقع insert کردن id رکورد جدید رو خود sqlserver اضاف میکنه
    حالا سوالم اینه که وقتی کنترل sqldatasourse یک رکورد جدید رو وارد این جدول میکنه، چطور میشه فهمید id این رکورد جدید اضافه شده چیه؟
    میخام این id رو تو همین صفحه بدست بیارم برا اینکه میخام ازش برای ورود در یک جدول دیگه استفاده کنم
    لطفا راهنماییم کنید
    (توی mysql آخرین id]–فیلد کلید-[ اضافه شده در یک جدول رو با دستور mysql_insert_id(); میشه بدست اورد. میخام همین کار رو با sqlserver و asp.net انجام بدم)


  2. #2
    VIP آواتار raziee
    تاریخ عضویت
    تیر 1404
    محل زندگی
    تهران
    سن
    36
    پست
    2,208

    نقل قول: آخرین فیلد کلید لضلفه شده

    SELECT MAX(ID) AS Max
    FROM YourTable

    اما با این چیزی که گفتی میتونی اطلاعات دو تا جدولت رو بفرستی به بانک و در بانکت یه تریگر بنویسی و اون جا این کارا رو بکنی که اطلاعات کمتر رد و بدل بشه.
    به این نگاه کن:
    https://barnamenevis.org/showthread.php?t=167785
    نگو به سرنوشت میبازی - تو بخوای فردا رو میسازی

  3. #3

    نقل قول: آخرین فیلد کلید لضلفه شده

    نقل قول نوشته شده توسط abdonsd مشاهده تاپیک
    حالا سوالم اینه که وقتی کنترل sqldatasourse یک رکورد جدید رو وارد این جدول میکنه، چطور میشه فهمید id این رکورد جدید اضافه شده چیه؟


    سلام.
    شما می تونید با این روش ID تولید شده رو بدست بیارید.

    موفق باشید.

    ویرایش: در لینکی که ارسال کردم، نویسنده مطلب از @@IDENTITY برای گرفتن ID آخرین رکورد اضافه شده با بانک استفاده کرده و من مطلقا حواسم به این موضوع نبود. این کار اشتباه هستش و باید از SCOPE_IDENTITY() برای گرفتن ID استفاده کرد. (توضیح تفاوت این دو از حوصله این تاپیک خارجه). جدا از این مساله، روش توضیح داده شده در اون لینک کاملا ایمن هستش.
    آخرین ویرایش به وسیله mehdi.mousavi : دوشنبه 25 آبان 1388 در 10:47 صبح

  4. #4
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    تهران
    پست
    130

    نقل قول: آخرین فیلد کلید لضلفه شده

    توي sp بعد از نوشتن دستور insert براي برگرداندن كد id بنويس

    select IDENT_CURRENT('YourTebleName')

  5. #5
    کاربر دائمی آواتار ali.akhbary
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    سايت برنامه نويس
    سن
    38
    پست
    303

    نقل قول: آخرین فیلد کلید درج شده Identity

    كلا سه تا روش داريم:
    IDENT_CURRENT returns the last identity value generated for a specific table in any session and any scope.

    @@IDENTITY returns the last identity value generated for any table in the current session, across all scopes.

    SCOPE_IDENTITY returns the last identity value generated for any table in the current session and the current scope.
    http://msdn.microsoft.com/en-us/library/ms175098.aspx

  6. #6

    نقل قول: آخرین فیلد کلید درج شده Identity

    این روش ها به مشکل همزمانی برنمی خورن ؟!
    مثلا" دو نفر همزمان Insert کردن اونوقت Id هاشون تداخل با هم پیدا نمی کنن !؟

  7. #7
    کاربر دائمی آواتار ali.akhbary
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    سايت برنامه نويس
    سن
    38
    پست
    303

    نقل قول: آخرین فیلد کلید درج شده Identity

    نقل قول نوشته شده توسط A.S.Roma مشاهده تاپیک
    این روش ها به مشکل همزمانی برنمی خورن ؟!
    مثلا" دو نفر همزمان Insert کردن اونوقت Id هاشون تداخل با هم پیدا نمی کنن !؟
    ببين دوست من، اون سه مورد بالا تا يه جاهايي كمكت مي كنند و مي توني خيلي كارها رو انجام بدي ولي اگه فكر مي كني بعضي جاها براي گرفتن آيدي به مشكل بر مي خوري، ...
    قبل از Insert و بعد از select scope_identity() يه دستور GO اضافه كن. اين باعث ميشه كه بعد از Insert كردن شما تا قبل از اينكه ID رو برنداشتي هيچ كسي نتونه هيچ دستوري رو اجرا كنه.


    go
    insert value
    select scope_identity()
    go

  8. #8
    کاربر تازه وارد
    تاریخ عضویت
    مهر 1388
    محل زندگی
    مشهد
    سن
    48
    پست
    65

    نقل قول: آخرین فیلد کلید لضلفه شده

    [quote=raziee;847481]
    SELECT MAX(ID) AS Max
    FROM YourTable


    اين روش استانداردي براي به دست آوردن آخرين Identity جدول نيست. چون ممكنه در فاصله بين دستور Insert و دستور Select MAX(ID جندين ركورد ديگه هم به جدول Insert شده باشه. با اين روش هميشه آخرين ID كه ايجاد شده است را خواهيد داشت نه ID ركودي كه خودتان Insert كرده ايد.
    روش صحيحش همونه كه دوستمون ali.akhbary گفتند. بعد از Insert كردن دستور SCOP_IDENTITY رو اجرا كن. اين دستور آخرين Identity ايجاد شده در يك stored procedure، Trigger يا function را بر مي گرداند.

    INSERT INTO Table1 Values("...") 
    SELECT SCOPE_IDENTITY() AS Last_Id

  9. #9
    VIP آواتار raziee
    تاریخ عضویت
    تیر 1404
    محل زندگی
    تهران
    سن
    36
    پست
    2,208

    نقل قول: آخرین فیلد کلید درج شده Identity

    حالا بعد از Insert میشه بگید چه ج.ری میشه بهش دسترسی داشت؟
    در sp که نوشتم scope_identity() رو برگشت میدم.
    حالا گرید ویو رو با
    ObjectDataSource
    وصل کردم ولی برای بازگشت دادن اون مقدار نمیدونم باید چه کار کنم!
    در رویداد Inserted چه کدی رو باید بنویسم؟

    string
    sID = e.ReturnValue.ToString();

    این کد همیشه مقدار 1 رو میده.

    string sID = e.OutputParameters["RETURN_VALUE"].ToString();

    این کد هم خطا تولید میکنه.
    نگو به سرنوشت میبازی - تو بخوای فردا رو میسازی

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

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