PDA

View Full Version : مشکل با فیلد از نوع identity



atf
یک شنبه 28 فروردین 1384, 13:46 عصر
با عرض سلام و خسته نباشید خدمت همه دوستان

من در یکی از جداول دیتا بیس فیلد identity دارم حال وقتی رکوردی را به این جدول insert می کنم می خواهم بلا فاصله فیلد identity این رکورد وارد شده را بخوانم
این کار در یک stored procedure انجام می شود و ممکن است 100 ها کاربر ان را (به صورت همزمان ) اجرا کنند .
حال سوال من اینجاست <<<>>>> چطوری باید این فیلد identity رو بخونیم و مطمئن باشیم که این رکورد برای همین کاربری است که رکورد را insert کرده .

:گیج: از توجه دوستان ممنونم

Microsoft.net
یک شنبه 28 فروردین 1384, 14:09 عصر
دوست عزیز

Return @@Identity

Microsoft.net
یک شنبه 28 فروردین 1384, 14:10 عصر
و چون هر کاربری هم سیشن مربوط به خودشو داره امکان تداخل 0% هست

aidinwashere
دوشنبه 29 فروردین 1384, 03:24 صبح
من به روش دوستمون یکم شک دارم.
میشه ارتباط یک جدول مشترک رو با session ها بگید؟
به هر حال,
میتونید از lock ها هم استفاده کنید (اگر مشکلتون رو درست فهمیده باشم)
با احترام.

AminSobati
دوشنبه 29 فروردین 1384, 09:40 صبح
زمانی که یک Connection به SQL Server برقرار میشه، یک سری متغیر سیستمی براش ایجاد میشه از جمله IDENTITY@@. وقتی چند کاربر به طور همزمان بروی یک جدول Insert انجام میدن، SQL Server میدونه هر Insert توسط کدوم کاربر (Connection) صورت گرفته و Identity که کاربر باعث تولیدش رو در IDENTITY@@ مربوط به خودش قرار میده.

میتونید از lock ها هم استفاده کنید
وقتی بدون Lock میشه این کا رو انجام داد، چرا همزمانی رو کاهش بدیم؟

atf
دوشنبه 29 فروردین 1384, 13:22 عصر
با کمال تشکر از همه دوستان :تشویق:

aidinwashere
دوشنبه 29 فروردین 1384, 20:22 عصر
آهان من این قضیه که فرمودین رو اصلا نمیدونستم!
مقاله ای میشه معرفی کنین؟
با احترام.

Microsoft.net
دوشنبه 29 فروردین 1384, 21:21 عصر
البته متاسفانه چون این متغیر به صورت Public در هر سیشن تعریف میشه اگه روی جدولی insert انجام بدین که برروی آن تریگر تحریک شونده ای نوشته شده باشد که آن تریگر خودش insert برروی جایی انجام دهد Identity مربوط به آن Return می شود و باعث ایجاد اشکال می گردد .

AminSobati
سه شنبه 30 فروردین 1384, 11:50 صبح
از SCOPE_IDENTITY استفاده کنین

Navid7h
چهارشنبه 09 شهریور 1384, 23:30 عصر
با توجه به مطالب فوق می توان نتیجه گرفت که وقتی از Identity@@ استفاده میکنیم SqlServer Engine با توجه به Connection برقرار شده مربوط به کدام User است مگر در صورتی که روی Tabel خاصی Trigger داشته باشیم که ممکن است تداخل روی دهد که راه حل آن را هم جناب آقای ثباتی فرمودند :


SCOPE_IDENTITY

راجع به راه حل فوق توضیح خوبی در BOOK ONLINE وجود دارد .

حال سوال من این است که با توجه به سیستم های Web Applications که در آنها Connection باز شده عملیات انجام میشود نتایج ارسال شده و Connection بسته میشود باز هم Identity@@ جواب میدهد؟

یعنی Identity@@ مربوط به هر User برمیگردد یا امکان خطا و عوض شدن Identity@@ آنها وجود دارد ؟

:لبخندساده

AminSobati
شنبه 12 شهریور 1384, 00:11 صبح
IDENTITY@@ به Win app یا Web app وابستگی نداره، همیشه روی سرور مقدارش دریافت میشه. ممکنه مشکلتون رو واضح تر بیان کنین

Navid7h
شنبه 12 شهریور 1384, 00:49 صبح
فرض میکنیم در یک وب سایت در قسمت Registration , کاربر اطلاعات رو وارد میکند

در Database دو جدول داریم
یکی tblUser , tbluserCompleteProfile


tbluser>> userid Identity bigint PK , username,userpass

tblusercompleteProfile >> Profileid Identity PK , UserID FK , Enmail , Tel ,

حال اگر با یک StroreProcedure کل عملیات مربوط به Insert در دو جدول رو انجام بدیم و پس از Insert در Tbluser از یک Identity@@ برای برگشت USerID استفاده کنیم و UserID , Email و Tel رو وارد جدول tblUserCompleteProfile بکنیم ایا مشکلی به وجود نمیاید !؟

اگر 10 نفر در یک لحظه با هم Register کنند ایا Identity@@ که برمیگردد بین Userها اشتبا نخواهد شد ؟
امیدوارم منظورم متوجه شده باشید جناب آقای ثباتی
متشکر از توجه شما
:لبخندساده

AminSobati
شنبه 12 شهریور 1384, 02:17 صبح
نوید جان Identity@@ برای هر Connection جدا تعیین میشه!

PalizeSoftware
شنبه 12 شهریور 1384, 02:49 صبح
با سلام به عزیزان
این لینک رو هم ببینید بد نیست.
پیرو فرمایشات جناب ثبانی
http://www.sqlteam.com/item.asp?ItemID=8003