PDA

View Full Version : سوال: صفر کردن indentity



صادق صدقی
پنج شنبه 13 خرداد 1389, 00:16 صبح
سلام
چه جوری indentity که Auto increment شده رو صفر کنیم

از طریق کد؟

محمد سلیم آبادی
پنج شنبه 13 خرداد 1389, 00:18 صبح
سلام،
منظورتون اینه که بعد از حذف تمام سطرهای جدول این مقدار reset بشه به صفر؟
یا اینکه به مقدار اولیه reseed بشه؟
یا اینکه مقدار 0 را بطور صریح در این ستون درج کنید؟

محمد سلیم آبادی
پنج شنبه 13 خرداد 1389, 00:23 صبح
اگر داده های جدول را با دستور truncate table حذف کنید خود به خود این مقدار reset / reseed میشه.
ولی این کد برای reseed کردن استفاده میشه. که سطر بعد یک مقدار از پارامتر سوم این کد زیر بیشتر خواهد بود
DBCC CHECKIDENT ('tableName', RESEED, 0) -- ok

صادق صدقی
پنج شنبه 13 خرداد 1389, 00:33 صبح
سلام
آره
می خوام هر وقت که همه رکورد ها حذف شه مقدار indentity هم از 1 شروع شه

یعنی وقتی که رکورد جدید درج شد id یک بشه

محمد سلیم آبادی
پنج شنبه 13 خرداد 1389, 00:38 صبح
سلام
آره
می خوام هر وقت که همه رکورد ها حذف شه مقدار indentity هم از 1 شروع شه

یعنی وقتی که رکورد جدید درج شد id یک بشه

در پست قبلم برای این نیاز راه حل ارائه دادم.
اگر نیاز به چیزی دارین که بطور خود کار این عمل را انجام بده بگین تا براتون Trigger اش را ایجاد کنم.

صادق صدقی
دوشنبه 17 خرداد 1389, 20:33 عصر
سلام
مرسی
عزیز من زیاد SQL یاد ندارم
میشه یه نمونه کد بزارید؟


فقط یه سوال
میشه هر سطری رو که پاک کردیم
بعد یکی دیگه که ادد کردیم ID اون سطر برابر بشه با اون ID که پاک کردیم؟(می دونم سوالم فضاییه اما پرسیدن بهتر از نپرسیدنه)

بابت پست قبلتون ممنونم
اینقدر زود جواب دادین که تا پستم رو ایجاد کرده بودم شما پست گذاشتین

واقعا ممنونم ازتون

محمد سلیم آبادی
دوشنبه 17 خرداد 1389, 20:46 عصر
میشه یه نمونه کد بزارید؟
تکه کد را که قرار دادم!
این دستور زیر مقدار ستونی که دارای خصیصه ی identity هست را به 0 برمیگردونه و بعدا اگر سطر جدیدی درج بشه مقدار ID شما برابر با 1 خواهد بود.
DBCC CHECKIDENT ('tableName', RESEED, 0) -- ok

فرض کنید:

create #temp table (id int identity(1,1))
insert into #temp default values

delete from #temp where 1=1
dbcc checkident(#temp, reseed,0)

میشه هر سطری رو که پاک کردیم
بعد یکی دیگه که ادد کردیم ID اون سطر برابر بشه با اون ID که پاک کردیم؟(می دونم سوالم فضاییه اما پرسیدن بهتر از نپرسیدنه)

امکان پذیر نیست ولی می شه موقع نمایش یک عبارت(فیلد) ایجاد کنید که این شماره های منظم را نمایش بده مثلا شماره سطرها به ترتیب 1و4و5و7و9 هستند و موقع نمایش در فیلد مورد نظر مقادیر 1و2و3و4و5 به جای مقادیر قبلی نمایش داده میشه. اگر از 2005 استفاده می کنید با تابع row_number این کار خیلی ساده انجام میشه.

حسین شهریاری
دوشنبه 17 خرداد 1389, 22:23 عصر
می خوام هر وقت که همه رکورد ها حذف شه مقدار indentity هم از 1 شروع شه
از این دستور استفاده کنین:

Truncate Table Table_Name

محمد سلیم آبادی
دوشنبه 17 خرداد 1389, 22:38 عصر
از این دستور استفاده کنین:

Truncate Table Table_Name

سلام،
گرچه به این مساله در پست های اولیه ام اشاره کردم ولی نکته ای که وجود دارد این است که اگر توسط جدول دیگری به این جدول ارجاع داده شود دیگر امکان استفاده از این دستور (حتی با حذف کردن تمام رکورد های جدولی که کلید خارجی در آن قرار دارد) وجود نخواهد داشت و پیغام زیر داده خواهد شد:

Cannot truncate table 'table_name' because it is being referenced by a FOREIGN KEY constraint.