PDA

View Full Version : گرفتن مقدار identity column پس از insert ؟



ramin_rp
پنج شنبه 15 دی 1390, 13:13 عصر
سلام
چطوری میشه پس از insert کردن مقدار فیلد identity column به دست آورد؟
چون برنامه تو شبکه اجرا میشه نمیتونم مقدار فیلد آخرین رکورد رو بگیرم چون ممکنه همزمان چند رکرد درج بشه
در ضمن سایر فیلد ها هم میتونن تکراری باشن

فیلد های جدول:

id : big int
user : uniqueidentifier
message: nvarchar(1000)
در ضمن فیلد آی دی primary key هم هست
کد هارو هم تو c# مینویسم

mohdeL
پنج شنبه 15 دی 1390, 15:57 عصر
از دستور
select @@identity
استفاده نمایید

ramin_rp
پنج شنبه 15 دی 1390, 16:39 عصر
نه دوست من این دستور مقدار آخرین id ایجاد شده رو برمیگردونه
در اینصورت ممکنه مقدار بازگشتی درست نباشه

mohsenm66
پنج شنبه 15 دی 1390, 17:10 عصر
با یک تریگر مقداری که هر کاربر ایجاد میکنه را در یک جدول ذخیره کن.
یعنی جدول 2 فیلد دارد فیلد اول نام کاربر و فیلد دوم مقدار رکوردی که کاربر ایجاد کرده است (با همون identity@@ ) اگر هم کاربر در جدول وجود داشته باشد مقدار قبلی را حذف کن و مقدار جدید را بریز

ramin_rp
پنج شنبه 15 دی 1390, 17:44 عصر
الان دارم از

SCOPE_IDENTITY();
استفاده میکنم این بهتر نیست؟

mohsenm66
پنج شنبه 15 دی 1390, 18:24 عصر
اینم خوب هست ولی توی محیط شبکه تست کردی ؟- جواب میده ؟

ramin_rp
شنبه 17 دی 1390, 10:14 صبح
سلام
فعلا که تو مراحل پیادسازی هستم مشکلی ازش ندیدم

baktash.n81@gmail.com
شنبه 17 دی 1390, 20:35 عصر
سلام ...

SQL تضمین می کنه که مقدار Scope_identity() آخرین Identity درج شده در فیلدی از نوع Identity هست در Session و Scope ی که این تابع فرا خوانی می شود ... identity@@ هم این مقدار رو در Session خودش بر می گردونه اما کاری با Scope نداره ... Ident_Curent همین مقدار رو بر می گردونه بدون در نظر گرفتن Session و Scope ...

با توجه به این مسئله شما از Scope_Identity استفاده کنی مشکلی پیش نمیاد ...

ramin_rp
دوشنبه 19 دی 1390, 11:30 صبح
با توجه به این مسئله شما از Scope_Identity استفاده کنی مشکلی پیش نمیاد ...

سلام
درسته به طور کامل تست کردم مشکلی پیش نمیاد

mosafer_deltang
چهارشنبه 05 بهمن 1390, 13:10 عصر
سلام ...

SQL تضمین می کنه که مقدار Scope_identity() آخرین Identity درج شده در فیلدی از نوع Identity هست در Session و Scope ی که این تابع فرا خوانی می شود ... identity@@ هم این مقدار رو در Session خودش بر می گردونه اما کاری با Scope نداره ... Ident_Curent همین مقدار رو بر می گردونه بدون در نظر گرفتن Session و Scope ...

با توجه به این مسئله شما از Scope_Identity استفاده کنی مشکلی پیش نمیاد ...

ممنون از توضیح خوبتون. میشه لطفا بیشتر در مورد این توابع توضیح بدین و این که در اینجا Session و Scope به چه معناست و فرقشون چیه؟

baktash.n81@gmail.com
شنبه 08 بهمن 1390, 07:57 صبح
این مثال خود SQL هست : فرض کن 2 تا جدول داریم T1 و T2 که هردوتاشون فیلد Identity دارن ... و رو جدول T1 یک تریگر ست شده که در هنگام Insertیه رکورد تو جدول 2 Insert می کنه ... بعد از انجام دستور در SQL ...

Scope_Identity : مقدار Identity جدول 1 رو بر می گردونه
@@Identity : مقدار IDentity جدول 2 رو بر می گردونه ...

در مورد Ident_Current هم که اسم جدول رو بهش می دی و او آخرین مقدار Insert شده رو بر می گردونه ...