PDA

View Full Version : بدست آوردن شماره كوچكترين ركورد حذف شده در فيلد auto inc



Alen
چهارشنبه 23 مرداد 1387, 11:09 صبح
قبلا راجع به اين موضوع كه چگونه فيلدهاي كه auto inc هستن را كنترل كنيم تا اگر آخرين ركورد حذف شده بود براي ورود ركورد جديد از همان شماره استفاده شود خيلي بحث شده(به عنوان مثال 20 ركورد داريم حالا اگه بيستمي حذف بشه و ركورد بخواد اضافه شه شماره 20 رو بگيره نه 21) .
اما موضوعي كه من مي خوام راحه به اون سوال بپرسم اينه كه ميشه يه چنين كاري رو براي ركوردهاي مياني جدول نيز انجام داد ، فرض كنيد كه به جاي ركورد 20 ركورد 9 حذف بشه آيا ميشه كاري كرد كه ركورد بعدي اين عدد 9 رو به عنوان فيلد كليد بپذيره؟
آيا اصلا چنين كاري ضرورتي داره ؟ يعني فرقي ميكنه كه اين شماره به ركوردي تعلق بگيره ؟

SYNDROME
چهارشنبه 23 مرداد 1387, 21:20 عصر
شما می توانید با ایجاد یک کرسر اولین مقدار که در جدول وجود ندارد را پیدا کنید و به این شکل می توانید از ایجاد Gap بین مقادیر جلوگیری کنید و از اعداد به بهترین شکل ممکن استفاده کنید.
موفق باشید

رضا جاسبی
چهارشنبه 23 مرداد 1387, 23:32 عصر
با یک دستور Select هم می توانیم کوچکترین مقدار ناموجود رو بدست آورد.


SELECT MIN(id) + 1 AS NewVal
FROM MyTable
WHERE (NOT EXISTS
(SELECT ID
FROM MyTable AS MyTable2
WHERE MyTable2.ID = MyTable.ID + 1))

AminSobati
چهارشنبه 23 مرداد 1387, 23:36 عصر
دوست عزیزم،
اساسا Identity فقط یک مکانیزم برای تولید اعداد یونیک با حداقل زحمت هستش. جا افتادن چند شماره بر اثر Delete یا Insertهای ناموفق برای دیتابیس اهمیتی نداره. اما:
در بعضی سناریوها پشت سر هم بودن این اعداد مهم هست (مثلا در سریال تولید بعضی محصولات). منظور اینکه نیاز شما مشخص میکنه آیا Gapها قابل اغماض هستند یا خیر. برای SQL Server مشکلی ایجاد نمیشه