PDA

View Full Version : سوال: بدست آوردن آخرین شماره ی فیلد Identity



armiin
چهارشنبه 12 خرداد 1389, 12:53 عصر
با سلام
یکی از ویژگی های فیلد Identity اینه که در صورت حذف شدن آخرین رکورد این ستون به اضافه کردن اعدادش ادامه میده (در صورتی که Seed همان 1 که در حالت Default است ،باشد ) پس در نتیجه آخرین عدد خود را در جایی ذخیره میکند !
میخوام آخرین شماره ی فیلد Identity را در حالتی که حتی آخرین رکورد یا رکوردها حذف شده اند بدست بیارم

Reseed کردن این ستون هم هنگام حذف آخرین رکورد به ذهنم رسید ولی در برنامه ام اختلال ایجاد میکنه !

محمد سلیم آبادی
چهارشنبه 12 خرداد 1389, 13:44 عصر
اگر می خواهین آخرین مقدار درج شده در ستونی با خصیصه ی IDENTITY را بدست آورین این کد کمکتون می کنه:


declare @t table(i int identity)

insert @t default values

select @@IDENTITY as [last identity value], SCOPE_IDENTITY() [last identity value]

delete from @t

select @@IDENTITY[last identity value], SCOPE_IDENTITY()[last identity value]

armiin
چهارشنبه 12 خرداد 1389, 14:27 عصر
ببخشید متوجه نشدم ، میشه با مثال بگید .مثلا به دست آوردن آخرین شماره ی چنین جدولی :
یک جدول (به نام Test ) که دارای دو فیلد (ID (Primary Key),Name ) که ID همان ستون Identity هست

محمد سلیم آبادی
چهارشنبه 12 خرداد 1389, 14:32 عصر
شما نیاز دارین تا به آخرین مقداری که SQL Server برای ستونی با خصیصه ی IDENTITY در یک جدول تولید کرده آگاه بشین.
خب دو راه وجود داره یکی استفاده از متغیر سیستمی IDENTITY@@ که برای بدست آوردنش نیاز هست PRINT یا SELECT بگیرین یعنی:

SELECT @@IDENTITY

از این تکه کد می توانید در پایان یک SP استفاده کنید تا به آخرین مقدار ID دست یابید. فرقی هم نداره که نام جدول یا ستون چی هست.

armiin
چهارشنبه 12 خرداد 1389, 14:54 عصر
خب اگه IDENTITY@@ کار میکرد که دیگه مزاحم شما نمیشدم :چشمک:
اینم عکس ، من به این جدول 2تا مقدار دیگه دادم یعنی Identity شماره ی 5,6 هم داشته و حذف شدن ، الان اگه یک رکورد اضافه کنم مقدار فیلد ID برابر 7 است (کدی هم که نوشتم مشخصه داخل عکس) !!!

محمد سلیم آبادی
چهارشنبه 12 خرداد 1389, 15:01 عصر
امکان داره کدی که با آن جدول را ایجاد کردین را ارسال کنید یا حد اقل دستورات INSERT؟ از SCOPE_IDENTITY هم استفاده کنید.

armiin
چهارشنبه 12 خرداد 1389, 18:29 عصر
من با حالت گرافیکی این کارو کردم که نتیجش در عکس مشخصه ولی الان با کد همه ی کارهارو (ساخت جدول ، مقدار دهی و ...) کردم مقدار Identity@@ درست بود !
راهی نیست در حالت گرافیکی هم درست کار کنه ؟
منظورم از حالت گرافیکی پنجره ی object explorer
راستی شرمنده که یه ذره دیر جواب دادم ، آخه دست راستم 2-3 ساعت پیش شکست :افسرده: سایت برنامه نویس باید 5-6 تا مدال افتخار بهم بده دارم با این دست تایپ میکنم :لبخند:

محمد سلیم آبادی
چهارشنبه 12 خرداد 1389, 18:45 عصر
ای بابا بخاطر شکسته شدن دست راستت در 2-3 ساعت پیش متاسفم! :ناراحت:

ولی جواب شما را یافتم. با تابع IDENT_CURRENT('table name')--ok همه چیز حل میشه!
حتی از طریق اینترفیس گرافیکی هم درج کنید بازم جواب میده:

SELECT IDENT_CURRENT('TEST') AS Last_Value