PDA

View Full Version : در مورد فیلدهای Auto Increment



A.Yousefi
شنبه 09 اردیبهشت 1391, 09:31 صبح
سلام
من فیلد ID یکی از جداولم که از نوع int هست رو AutoInc در نظر گرفتم.
هر موقع یه رکورد به جدولم اضافه میشه یه واحد به مقدار فیلد ID م اضافه میشه.
فرض کنید 5 تا رکورد دارم،مقدار ID آخرین رکوردم 5 هست،حالا آخرین رکوردم رو حذف میکنم،وقتی یه رکورد دیگه اضافه میکنم محتوای فیلد ID ش میشه 6،در صورتی که 5 تا رکورد دارم.
چیکار کنم که اینطوری نشه و مقدار فیلد ID بشه همون مقدار ID رکورد قبل به علاوه 1؟

baktash.n81@gmail.com
شنبه 09 اردیبهشت 1391, 11:41 صبح
سلام

خوب با کد زیر شما می تونید در کد Insert به فیلد Identity مقدار بدید .. اما برای پیدا کردن عددی که حذف شده خودتون باید کد های لازم رو ایجاد کنید ... ولی کلا کاری که می خواهید انجام بدید اصلا توصیه نمی شه ... که دلایل زیادی داره ...

SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }

DlphIran
شنبه 09 اردیبهشت 1391, 11:43 صبح
ساختار فیلدهای Auto Increment بدین گونه هست که در هنگام درج اطلاعات جدید یک شماره اضافه می شود و هیچ تغییری در هنگام حذف انجام نمی دهد. و بیشتر بعنوان کد ردیف مورد نظر برای حذف یا تغییر استفاده می شود.
اگر منظورتون استفاده از این فیلد به عنوان شماره ردیف هست باید فیلدتون رو یکی از متغیرها ی نوع int انتخاب و با هر بار درج اطلاعات، دستی عدد مورد نظر رو اضافه و ثبت کنید. همچنین بعد از حذف باید درون حلقه for به تعداد رکوردهای موجود در جدول ، البته بعد از حذف ، شماره ردیف رو update کنید.

A.Yousefi
شنبه 09 اردیبهشت 1391, 12:08 عصر
من میخوام از فیلد IDم هم به عنوان شماره ردیف استفاده کنم و هم به عنوان ID کاربرام برای شناسایی اونا،فیلد IDم رو هم AutoInc در نظر گرفتم،میتونم اونو خودم دستی مقداردهی کنم و موقع درج یه رکورد جدید مقدار ID رکورد قبل رو بخونم و بهش یکی اضافه کنم،اما اینجوری کارم سخت میشه،میخواستم بدونم تنظیم خاصی وجود نداره تا فیلد AutoInc خودش به صورت خودکار اینکار رو انجام بده؟
اصلا چیزی که برام جالبه اینه که مقدار این AutoInc کجا ذخیره میشه؟
فرض کنید من 10 تا رکورد دارم مقدارش 10 هست 9 تاشو حذف میکنم وقتی میخوام رکورد دوم رو به جدولم اضافه کنم مقدارش میشه 11
این 11 رو از کجا میاره؟

SReza1
شنبه 09 اردیبهشت 1391, 17:10 عصر
من میخوام از فیلد IDم هم به عنوان شماره ردیف استفاده کنم و هم به عنوان ID کاربرام برای شناسایی اونا،فیلد IDم رو هم AutoInc در نظر گرفتم،میتونم اونو خودم دستی مقداردهی کنم و موقع درج یه رکورد جدید مقدار ID رکورد قبل رو بخونم و بهش یکی اضافه کنم،اما اینجوری کارم سخت میشه،میخواستم بدونم تنظیم خاصی وجود نداره تا فیلد AutoInc خودش به صورت خودکار اینکار رو انجام بده؟
اصلا چیزی که برام جالبه اینه که مقدار این AutoInc کجا ذخیره میشه؟
فرض کنید من 10 تا رکورد دارم مقدارش 10 هست 9 تاشو حذف میکنم وقتی میخوام رکورد دوم رو به جدولم اضافه کنم مقدارش میشه 11
این 11 رو از کجا میاره؟

baktash.n81@gmail.com جواب مناسب رو داده. اينا فيلدهايي هستند كه خود SQL مديريت ميكنه. با همون تابع كه اشاره شد ميتوني دستي مقدار دهي كني. اگر هم ميخواهيي reset كني از دستور


DBCC CHECKIDENT (TableName , RESEED, @SeedValue)



استفاده كني. ديگه مشكل چيه؟

hamid_kz
شنبه 09 اردیبهشت 1391, 17:21 عصر
چرا خودتون شماره رديف رو ايجاد نمي كنيد؟؟ معمولا شماره رديف داخل گزارش ها معني پيدا ميكنه... به نظرم براي اينكه ديتاي زيادي نگه نداريد، موقع ساخت گزارش رديف رو هم اضافه كنيد. يعني داخل Select Statement اي كه گزارش رو ميسازه با Row Number رديف ايجاد كنيد..