PDA

View Full Version : Reset کردن مقدار یک ستون Identity



hasti.lm
شنبه 19 تیر 1389, 17:44 عصر
سلام
من برای درخواست هایی که دارم یک شماره درخواست در نظر گرفتم که این شماره از ترکیب کد بخش و یک شماره Identity تشکیل شده از اونجائیکه تعداد درخواست ها زیاده در ابتدای هر سال این شماره Identity دوباره از صفر ست می شه در واقع برای جستجوی درخواست از سال و شماره درخواست استفاده میکنم مشکل من اینجاست که تو دیتابیس چطوری این فیلدو تعریف کنم یا چطوری در ابتدای هر سال فیلد Identity را صفر کنم
باتشکر

pezhvakco
یک شنبه 20 تیر 1389, 08:56 صبح
درود :
کد دستور برای صفر کردن Identity >

مقدار صفر در پارامتر سوم، براي شروع مقادير جديد است
DBCC CHECKIDENT ('tableName', RESEED, 0) -- ok

فکر خوش .

rroona
چهارشنبه 03 آذر 1389, 23:45 عصر
سلام
من توی دیتا بیسم یه ستون به اسم ردیف دارم که از یک شروع میشه.
زمانی که یک رکورد رو حذف میکنم شماره ردیف هم پاک میشه و دیگه اون شماره ردیف ثبت نمیشه.چطور میتونم ردیف از بین رفته رو دوباره در زمان ایجاد یک رکورد جدید برگردونم؟؟؟
در ضمن این ردیفها بصورت خودکار توسط اس کیو ال انجام میشن

این دستور کمکم نکرد.من میخوام ردیفها بصورت خود کار از نو چیده بشن و اعدادی که جاشون خالیه پر بشن
DBCC CHECKIDENT

mbasirati
پنج شنبه 04 آذر 1389, 00:18 صبح
سلام
من توی دیتا بیسم یه ستون به اسم ردیف دارم که از یک شروع میشه.
زمانی که یک رکورد رو حذف میکنم شماره ردیف هم پاک میشه و دیگه اون شماره ردیف ثبت نمیشه.چطور میتونم ردیف از بین رفته رو دوباره در زمان ایجاد یک رکورد جدید برگردونم؟؟؟
در ضمن این ردیفها بصورت خودکار توسط اس کیو ال انجام میشن

این دستور کمکم نکرد.من میخوام ردیفها بصورت خود کار از نو چیده بشن و اعدادی که جاشون خالیه پر بشن
DBCC CHECKIDENT
سلام
شما میتونی یه trigger after delete تعریف کنی که کدش این باشه:

DECLARE @a INT
SELECT TOP 1 @a=id FROM table_name ORDER BY id DESC
DBCC CHECKIDENT (table_name,RESEED,@a)

rroona
پنج شنبه 04 آذر 1389, 15:41 عصر
سلام
شما میتونی یه trigger after delete تعریف کنی که کدش این باشه:

DECLARE @a INT
SELECT TOP 1 @a=id FROM table_name ORDER BY id DESC
DBCC CHECKIDENT (table_name,RESEED,@a)



من از این کد استفاده کردم اما هیچ تغییری در ستون ردیف ایجاد نشد
لطفا بیشتر کمکم کنید

mbasirati
پنج شنبه 04 آذر 1389, 23:07 عصر
من از این کد استفاده کردم اما هیچ تغییری در ستون ردیف ایجاد نشد
لطفا بیشتر کمکم کنید

این کدی که من نوشتم اگر از آخر جدول رکوردها رو پاک کنید جواب میده ، من خودم تست کردم
شما بیشتر توضیح بدید که چرا جواب نگرفتید

rroona
جمعه 05 آذر 1389, 02:14 صبح
فهمیدم
حالا اگه از وسط جدول پاک کنیم چی؟
راهش چیه؟

mbasirati
دوشنبه 08 آذر 1389, 20:02 عصر
شما میتونید از کرسر استفاده کنید. به این صورت که با استفاده از کرسر تشخیص بدید که کدوم اعداد در ستون identity پاک شده ، اون عدد رو پیدا کنید. بعد خصوصیت آتونامبر رو offکنید و اونو درج کنید و دوباره خصوصیت آتو نامبر رو on کنید.
با استفاده از دستور set identity_insert می تونید یه فیلدی که identity هست رو به صورت دستی مقدار دهی کنید.یعنی ویژگی آتونامبر بودن رو فعال یا غیرفعال کنید.
SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }
امیدوارم متوجه شده باشید.

Reza_Yarahmadi
سه شنبه 09 آذر 1389, 07:43 صبح
از اونجائیکه تعداد درخواست ها زیاده در ابتدای هر سال این شماره Identity دوباره از صفر ست می شه
متوجه اين بخش از توضيحتون نميشم! يعني تعداد درخواستها بعد چند سال بييشتر از 9,223,372,036,854,775,807 ميشه!!؟ شما فيلدي كه قراره Identity باشه رو از نوع bigint بگيريد و كاري هم نداشته باشيد چه ركوردهايي حذف شده.
ولي اگر نظم كدها براتون مهمه ميتونيد شماره رو خودتون توليد كنيد به اين صورت كه ابتدا تعداد ركوردهاي ثبت شده در سال جاري رو بدست بياريد و يك واحد بيشتر اون رو به عنوان شماره مورد نظر در نظر بگيريد. زمان حذف هم بعد از اينكه ركورد مورد نظر حذف شد شماره تمام كدهاي بعد از ركورد حذف شده رو يك واحد كم كنيد.