ورود

View Full Version : درج همزمان داده در یک جدول و گرفتن id درج شده



asemoon barooni
پنج شنبه 03 مهر 1393, 11:14 صبح
باسلام

من یک برنامه تحت شبکه دارم که کاربران همزمان در حال درج در دیتابیس هستن و می خوام هر رکوردی که درج میشه id اون که به صورت identity هستش برای درج در جدول دیگه output کنم و به استور پروسیجر بعدی پاس بدم .. حالا چون من برای تراکنش خاصیت همزمانی رو true کردم نمیشه از دستور IDENT_CURRENT استفاده کنم مشکل پیش میاد باید برای رفع این مشکل چیکار کنم اگه راهنمایی کنید ممنون میشم .


با تشکر

pezhvakco
پنج شنبه 03 مهر 1393, 18:53 عصر
سلام
یه نگاه کوچیک به این ادرس داشته باشین

http://www.dotnettips.info/post/1381/identity-%D9%88-%D9%85%D8%A8%D8%A7%D8%AD%D8%AB-%D9%85%D8%B1%D8%A8%D9%88%D8%B7%D9%87-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-%D9%86%D8%AD%D9%88%D9%87-%D8%A8%D8%AF%D8%B3%D8%AA-%D8%A2%D9%88%D8%B1%D8%AF%D9%86-%D9%85%D9%82%D8%A7%D8%AF%DB%8C%D8%B1-identity

شاید درخواست شما رو پاسخ داد

asemoon barooni
جمعه 04 مهر 1393, 18:29 عصر
pezhvakco (http://barnamenevis.org/member.php?59994-pezhvakco) خیلی ممنون لینک رو نگاه کردم و بسیار مفید بود ولی باتوجه به توضیح نهایی آن که گفته Scop_Identity() دربیشتر مواقع درخواست برنامه نویسان رو برآورد میکنه باز این ابهام رو ایجاد میکنه که این تابع در درج های همزمان تحت شبکه Identity ها رو درست output میکنه؟

fakhravari
جمعه 04 مهر 1393, 20:47 عصر
Scope_Identity :چشمک:

asemoon barooni
یک شنبه 06 مهر 1393, 21:36 عصر
ممنون از یادآوری اشتباه املائی تون آقای فخرآوری ... واسه جواب این سوال چرا مدیران این بخش پاسخی ندارن؟ جای تعجب داره هر وقت من سوال هایی که به نحوه ی با مسائل اصلی مربوط است رو می پرسم جوابی دریافت نمی کنم !!!

fakhravari
سه شنبه 08 مهر 1393, 15:10 عصر
1- متغییر سیستمی Identity@@ : این متغییر سیستمی حاوی آخرین Identity ایجاد شده به ازای Session جاری شما است. لازم به ذکر است اگر به واسته Insert شما، Identity دیگری در یک حوزه دیگر (مانند یک Trigger) ایجاد شود مقدار موجود در این متغییر حاوی آخرین Identity ایجاد شده است. (یعنی Identity ایجاد شده توسط آن تریگر و نه خود جدول). لازم به ذکر است این موضوع به طور کامل در ادامه مقاله شرح داده شده است.

2- استفاده از تابع()Scope_Identity : با استفاده از این تابع می‌توانیم آخرین Identify ایجا دشده به ازای Session جاری را بدست آوریم. لازم به ذکر است مقادیر Identity ایجاد شده توسط سایر حوزه‌ها تاثیر در مقدار بازگشتی توسط این تابع ندارد. در ادامه مقاله این موضوع به طور کامل بررسی شده است.

3- استفاده از تابع ident_Current : این تابع آخرین مقدار Identity موجود در یک جدول را نمایش می‌دهد. ذکر این نکته ضروری است که Identity ایجاد شده توسط سایر Sessionها هم روی خروجی این تابع تاثیرگذار است. چون این تابع آخرین Identity موجود در جدول را به شما نمایش می‌دهد و نه Identity ایجاد شده به ازای یکSession را.




استفاده از Scope_Identity برای دریافت ID بعد ثبت بهتر موارد دیگر کاربرد دارد.


برای مثال


روی یکی از جداول تریگری جهت لاگ گزاشتیم، حالا یک رکورد ثبت میشه و اگر از نوع Identity@@ برای دریافت استفاده کنیم چون تریگر هم عمل می کنه جواب + 1 میشه خب اینطوری مقدار ID خراب برگشت داده میشه