PDA

View Full Version : بازگرداندن کلید اصلی پس از insert



ali_mp64
دوشنبه 03 فروردین 1388, 18:26 عصر
سلام دوستان .
من یه table دارم که یه کلید اصلی Auto Increment داره .
با استفاده از یه Stored Procedure درون این table داده insert می کنم .
حالا می خوام بلافاصله پس از Insert ، کلید اصلی همون سطری که اضافه شد رو برگردونه .
در ضمن چون دیتابیس من روی شبکه اجرا می شه ممکنه هر لحظه چند بار این stored procedure اجرا بشه بنابراین نمی تونم از آخرین سطر اضافه شده استفاده کنم .

siavash_realy
دوشنبه 03 فروردین 1388, 21:59 عصر
خوب يك راهش اينه كه يك فيلد به بانكت اضافه كني كه توش تاريخ و ساعت دقيق ورود داده رو كه توسط procedure ات پاس داده ميشه ذخيره كنه (مثلا اسم اون قيلد ميتونه Insert_DateTime باشه) و از رو همون بانك رو فيلتر يا سرچ كني و كليدت رو بدست بياري يعني :
procedure تو داده رو از ورودي ميگيره و دقيقا قبل از insert‌كردن داده در جدول يك متغير از جنس تاريخ و زمان هم ميسازي (مثلا به اسم MyNow) و مقدار اون رو مساوي زمان جاري قرار ميدي و سپس مقادير ورودي رو به همراه اين مقدار تاريخ و زمان (كه درون تابع ساخته شده) به جدول اضافه ميكني و پس از اتمام عمليات insert جدول رو روي فيلد Insert_DateTime و با مقدار MyNow فيلتر ميكني يا سرچ ميكني و كليد رو بدست مياري.
البته يك راه ديگه هم داري كه امنيت همزماني رو بالاتر ببري مثلا به جاي استفاده از يك فيلد زماني از يك فيلد عددي استفاده كني و توش يك مقدار رندم رو كه توسط تابعت ساخته ميشه بريزي و بعدش هم بر اساس همون مقدار رندم كه هنوز تو تابع قابل شناسايي هستش فيلتر يا سرچ رو انجام بدي

sh
دوشنبه 03 فروردین 1388, 22:41 عصر
برای بازگرداندن آخرین کلیدی که ثبت شده درجدول Table1 از کد زیر استفاده کن



SELECT IDENT_CURRENT('Table1') AS LastID


و البته راجب @@Identity تحقیق کن

accpascal
دوشنبه 03 فروردین 1388, 23:23 عصر
من در اینگونه موارد که هرلحظه امکان درج رکورد وجود دارد از حالت اتونامبر استفاده نمی کنم بلکه بصورت مانوئل ابتدا فیلد کلید راتعریف و سپس رکورد را درج می کنم و تا حالا خوب نتیجه داده است

AminSobati
سه شنبه 04 فروردین 1388, 01:26 صبح
پاسخ شما Scope_Identity هست. بعد از Insert در Parent، مقدار این تابع رو بدست بیارید. همزمانی کاربرها هم مشکلی ایجاد نخواهد کرد

object
چهارشنبه 05 فروردین 1388, 23:29 عصر
Select @@Identity
اين كد آخرين كليد Identity رو كه در واقع هموني باشه كه SP شما دريافتش كرده برميگردونه البته به شرطي كه روي اون جدول Trigger ي نداشته باشيد كه عمليات Insert در يك جدول حاوي ستون Identity انجام بده