ورود

View Full Version : مشکل autonumber در sql2016



niknam_mh
پنج شنبه 19 اسفند 1395, 11:07 صبح
باسلام
دوستان من با sqlexpress2016 کار میکنم مشکلی که دارم این هست که کلید اصلی که در جدولها قرار دادم و identity اونها رو برابر yes گذاشتم و identity increment و identity seed رو هم برابر یک قرار دادم ولی شماره کلید اصلی که به صورت اتوماتیک وارد میشه به ترتیب و پشت سرهم نیست به نظر شما مشکل از کجاست؟

144664

Reza_Yarahmadi
پنج شنبه 19 اسفند 1395, 14:16 عصر
در نسخه 2012 بخاطر نوع مدیریت فیلدهای Identity این اتفاق میفته (بعد از هر بار ریست شدن سرویس SQL Server)
اگه سیستم سرور شما زیاد خاموش و روشن میشه میتونید با یکی از روشهای زیر اونو لغو کنید در غیر اینصورت بذارید همینطوری باشه.
1 - استفاده از Sequence
CREATE SEQUENCE YourSequenceName
AS INT -- OR BIGINT
START WITH 1
INCREMENT BY 1
MINVALUE 0
NO MAXVALUE
NO CACHE
در زمان اضافه کردن اطلاعات هم
insert into YourTable values
(NEXT VALUE FOR YourSequenceName, 'any value')

2 - ثبت پارامتر t272- در استارت آپ سرویس SQL Server
SQLServer configuration manager رو باز کنید
روی SQL Server 2012 راست کلیک کنید و Properties بزنید
از تب startup parameters در قسمت پارامتر مقدار t272- رو وارد کنید و دکمه Add رو بزنید.
سرویس SQL Server رو ریستارت کنید.

khoshblagh
پنج شنبه 19 اسفند 1395, 15:57 عصر
با سلام
حالا معنی این اقدام اینه که اتو نامبرهای حذف شده را ایجاد میکند و یا فقط آنها را ایندکس میکند؟ متشکرم

Reza_Yarahmadi
پنج شنبه 19 اسفند 1395, 23:55 عصر
با سلام
حالا معنی این اقدام اینه که اتو نامبرهای حذف شده را ایجاد میکند و یا فقط آنها را ایندکس میکند؟ متشکرم

در نسخه 2012 برای مدیریت Identity از روش کش کردن استفاده شده (برای اهداف خاصی) وقتی سرویس sql server ریست میشه به ازا نوع فیلد یه مقداری پرش میکنه (به اندازه حجم کش)
برای tinyint = 10 , smallint = 100 , int = 1000 , bigint , numeric = 10000
روشهای بالا از این موضوع جلوگیری میکنه (پرش کردن)، نمیتونه مقدارهای ست شده قبلی رو تغییری بده و یا به موضوع ایندکس ارتباطی نداره.