چرا فیلد identity جدول من در SQL Server 2012 پرش های 1000 تایی دارد؟

مقدمه:

در SQL Server 2012 پس از هر بار Restart شدن دیتابیس سرور، یک پرش در فیلد identity اتفاق می افتد و مقدار این پرش به نوع فیلد identity بستگی دارد. چنانچه نوع فیلد Integer باشد یک پرش 1000 تایی رخ می دهد و چنانچه از نوع Bigint باشد پرش 10000 تایی رخ می دهد.

 

به عنوان مثال فرض کنید جدولی طراحی شده با یک فیلد Identity که این فیلد به عنوان کلید اصلی تعریف شده. فرض کنید تا کنون دو رکورد در این جدول وارد شده و نوع فیلد identity از نوع Integer می باشد.

 

 

قاعدتا مقدار فیلد Identity برای رکورد جدید با توجه به اینکه مقدار Identiy بصورت پیش فرض از 1 شروع می شود می بایست عدد 2 باشد ولی با مراجعه به سرور متوجه می شوید که این عدد 1002 است.

 

 

شما در اینجا متوجه می شوید که در فاصله زمانی درج رکورد سوم و چهارم یک بار سرور دیتابیس Restart شده.

 

 

راه حل:

با توجه به اینکه این مورد به عنوان یک کارایی و نه یک Bug از سمت Microsoft ارائه شده، ایران هاست بر روی سرورهای اشتراکی خود اقدام به غیر فعال نمودن این کارایی نمی کند لذا چنانچه این مورد باعث ایجاد مشکل برای دیتابیس شما شده و شما نیاز دارید تا مقادیر این فیلد بصورت مرتب و پشت سر هم باشد، بهتر است به جای فیلد Identity از فیلد Sequence استفاده کنید.