PDA

View Full Version : مشکلات (Is Identity = Yes)(Auto Numbering)



majid_darab
سه شنبه 06 مرداد 1388, 15:46 عصر
با سلام بر شما دوستان عزیز و گرامی :
همان طور که از موضوع تاپیک معلوم است مشکل من در مورد فیلدهایی است که property اونها در قسمت is identity به صورت بله تعیین شده است...
خوب این ویژگی همیشه برای من دردسرساز بوده است ... چرا که وقتی از بین رکوردهای شماره گذاری شده یکی دو تا رو پاک می کنم شماره گذاری ترتیبی به هم می ریزه و حالا بیا و درستش کن.
دنبال راه حلی برای ریست کردن اتوماتیک اینگونه فیلدها هستم ... آیا راهی وجود دارد که به محض اینکه یک رکورد را حذف می کنیم شماره گذاری ها دوباره به ترتیب شود و این مشکل مرتفع گردد.
پس از کمی گشت و گذار به دستور زیر برخوردم که اونم یه مشکلی داره :
اما دستور به صورت زیره :


جهت ریست کردن مقدار Identity یک جدول در SQL Server ، می‌توانید از دستور زیر استفاده کنید:
كد:
USE DataBase
GO
DBCC CHECKIDENT (MyTable, RESEED, 30)
GO

که در اینجا MyTableنام جدول مورد نظر و 30 مقدار جدیدی است که شمردن از آن آغاز خواهد شد


اما مشکل کد فوق :
کدفوق فقط درحالتی استفاده می شه که بخوایم از رکورد کنونی به بعد seed رو عوض کنیم و با بالایی ها کاری نداره
و کاربرد دوم اون زمانیه که کل رکوردها رو میخوایم پاک کنیم که در اینجا ریست صورت می گیره ...
============================================
آیا راهی وجودداره که به محض پاک شدن یک رکورد از وسط داستان مقادیر اینگونه فیلدها اتوماتیک دوباره به ترتیب بشه؟؟؟؟؟؟
============================================
با تشکر
مجید

majid_darab
چهارشنبه 07 مرداد 1388, 03:28 صبح
از دوستان کسی راهنمایی نمی کنه...؟:ناراحت:

In_Chan_Nafar
چهارشنبه 07 مرداد 1388, 12:10 عصر
اگر شما از اين فيلد به عنوان شماره رديف استفاده مي كني كاملا اشتباه است. اينكه مقداري كه تخصيص داده شده مجددا تخصيص داده نشود قانون اين فيلد است و بايستي جهت unique بودن مقدار با اين روش كار كند مگر اينكه با دستور CHECKIDENT حالش رو بگيري
كارت رو دقيق بگو تا يه سناريو مناسب براي آن ايجاد كنيم

majid_darab
چهارشنبه 07 مرداد 1388, 15:42 عصر
اگر شما از اين فيلد به عنوان شماره رديف استفاده مي كني كاملا اشتباه است. اينكه مقداري كه تخصيص داده شده مجددا تخصيص داده نشود قانون اين فيلد است و بايستي جهت unique بودن مقدار با اين روش كار كند مگر اينكه با دستور CHECKIDENT حالش رو بگيري
كارت رو دقيق بگو تا يه سناريو مناسب براي آن ايجاد كنيم

با سلام :
هدف من استفاده از property آی دن تی تی به صورت خاصه نیست.درثانی پر واضح است که نمی خوام unique بودن این فیلد رو دستکاری کنم ....
هدف من داشتن فیلدی است که همان طور که گفتید شماره ردیف رو به من بده که اعدادی پشت سر هم و غیر تکراری اند و زمانی که یک یا چند رکورد از جدولو پاک می کنم اتوماتیک شماره ردیف اصلاح بشه (اینجوری هنوز هم unique است)(آیا property یا خاصیتی وجود داره که این کارو انجام بده؟)(یا اینکه باید با t-sql اینکارو انجام داد ؟)
با تشکر
مجید

majid_darab
پنج شنبه 08 مرداد 1388, 01:48 صبح
نیستین بچه ها؟؟؟؟؟؟؟


(/___\)
(='.'=)
(")_(")

بهنام بهمنی
پنج شنبه 08 مرداد 1388, 14:15 عصر
شما می توانید با استفاده از trigger و صدا کردن کدی که خودتان در بالا نوشته اید در trigger مرتبط این کار را انجام دهید.

majid_darab
پنج شنبه 08 مرداد 1388, 14:53 عصر
سلام بهنام جان :
من که مشکل این کدو عنوان کردم ...
آیا با همون کد میشه اینکارو انجام داد؟
با تشکر

بهنام بهمنی
پنج شنبه 08 مرداد 1388, 15:27 عصر
کدفوق فقط درحالتی استفاده می شه که بخوایم از رکورد کنونی به بعد seed رو عوض کنیم و
چون در trigger مشخصات رکورد اصلاع شده می آید, لذا با استفاده از آن وکد گفته شده, می توان اصلاح مورد نظر را انجام داد.

majid_darab
شنبه 10 مرداد 1388, 13:27 عصر
باتشکر
تست می کنم خبرشو بهتون میدم
ممنون