PDA

View Full Version : سوال: گرفتن مقدار فیلد Identity هنگام ثبت رکورد جدید



morika
جمعه 06 بهمن 1391, 03:00 صبح
سلام
من تو بانکم یه فیلد ID دارم که Identity هست و به ازای هر رکورد جدید خودش اضافه می شه. حالا می خوام وقتی رکورد ثبت میشه این مقدار id رو بتونم بخونم. چون باید همزمان با ثبت رکورد جدید ID رکورد رو به کاربر نمایش بدم. بخاطر یه سری فیلدهای دیگه که تو رکرود هست امکان این اینکه جدول رو مرتب کنم و آخرین رکورد رو هم بعداز ثبت کردم بگیرم وجود نداره. حالا راهی وجود داره که ما این رکورد ID رو همزمان با اینکه داره ثبت میشه بگیریم؟
ممنون

plus
جمعه 06 بهمن 1391, 03:11 صبح
SCOPE_IDENTITY دستور SQL برای دریافت آخرین مقدار ID درج شده در جدول، در همان SCOPE است.منظور از SCOPE، یک Batch، Stored Procedure ، Trigger، Function( یک دسته دستور) و ...هست.مطمئین نیستم، اما فکر میکنم اگه شما در Command ی که به SQL میفرستین، بعد از دستور Insert، ; بگذارین و ()SCOPE_IDENTITY رو بنویسید، باExecuteScalar کردن این Command این دو تا دستور باید یک Batch حساب بشن (و توی یک Scope) بنابراین ID درست برمیگرده.اگه امتحان کردین مارو بی خبر نگذاریدD-:
منظورم چیزی شبیه این هست:

sqlCmd.CommandText = "INSERT INTO sqlTable ( ..... ) VALUES (... ) ; SELECT SCOPE_IDENTITY()";

البته اگه از Stored Procedure استفاده کنید به سادگی میشه از همین SCOPE_IDENTITY استفاده کرد.

پ.ن:
اگه شما نرم افزارتون چند کاربره نیست (همزمان یک کاربر فقط با دیتابیس کار میکنه) میتونید از دستور IDENTITY@@ به صورت جداگانه استفاده کنید که آخرین مقدار درج شده در جدول بدون توجه به SCOPE رو برمیگردونه.


sqlCmd.CommandText = "INSERT INTO sqlTable ( ..... ) VALUES (... )";
// Execute command
//...
sqlCmd.CommandText = "SELECT @@IDENTITY";
// Execute command

morika
جمعه 06 بهمن 1391, 09:53 صبح
ممنون جناب plus کد شما کاملا درست بود. البته چون من خیلی شرایطم خاص بود خیلی عجیب قریب استفاده کردم ازش ولی راه حل کاملا درست بود. ممنون