ورود

View Full Version : شماره دهی مجدد ستون row پس از حذف یک سطر



rahil_2008
پنج شنبه 18 تیر 1388, 00:49 صبح
سلام دوستان
من یه جدول ساختم و یه ستون row براش تعریف کردم که بطور خودکار شماره دهی بشه. حالا می خوام ببینم راهی هست که اگر ردیف اول از جدولو پاک کردم sql بیاد دوباره ستون rowرا sort کنه و اونو دوباره از یک مقداردهی کنه؟
این کارو می شه با trigger هم انجام داد؟
ممنون می شم راهنماییم کنید

محمد سلیم آبادی
پنج شنبه 18 تیر 1388, 01:03 صبح
سلام دوستان
من یه جدول ساختم و یه ستون row براش تعریف کردم که بطور خودکار شماره دهی بشه. حالا می خوام ببینم راهی هست که اگر ردیف اول از جدولو پاک کردم sql بیاد دوباره ستون rowرا sort کنه و اونو دوباره از یک مقداردهی کنه؟
این کارو می شه با trigger هم انجام داد؟
ممنون می شم راهنماییم کنید


سلام.
من هم همچین مشکلی داشتم ستون PK جدول ام از نوع Identity بود و هر بار یکی به قبلی اضافه می شد.
ولی حتی وقتی که تمام سطر های جدول ام را حذف می کردم این مقدار 1 نمی شد.
راه حل چیست؟

bad_boy_2007
جمعه 19 تیر 1388, 00:30 صبح
سلام.
من هم همچین مشکلی داشتم ستون PK جدول ام از نوع Identity بود و هر بار یکی به قبلی اضافه می شد.
ولی حتی وقتی که تمام سطر های جدول ام را حذف می کردم این مقدار 1 نمی شد.
راه حل چیست؟

از حالت Identity وردارد ، جدولت رو سیو کن و ببند و دوباره به حالت Identity برگردون (اگه جواب نگرفتی یک رکورد بزار و فیلد ID رو دستی مقدار دهی کن بعد به حالت Identity برگردون)

اگر هم اینقدر مهمه که میخوای ردیف خالی نداشته باشی با تریگر مقدار ID رو بده

محمد سلیم آبادی
جمعه 19 تیر 1388, 03:00 صبح
سلام دوستان
من یه جدول ساختم و یه ستون row براش تعریف کردم که بطور خودکار شماره دهی بشه. حالا می خوام ببینم راهی هست که اگر ردیف اول از جدولو پاک کردم sql بیاد دوباره ستون rowرا sort کنه و اونو دوباره از یک مقداردهی کنه؟
این کارو می شه با trigger هم انجام داد؟
ممنون می شم راهنماییم کنید

سلام.
یک راه منطقی که به ذهنم می رسه اینه که یک ستون به جدولت اضافه کنی از نوع DATETIME که هنگام درج بطور پیش فرض تاریخ سیستم را بگیرد.
و هر موقع که می خواستی یک سطری از جدول را حذف کنی یا اضافه کنی با استفاده از تریگر برنامه ای بنویسی که با استفاده از ROW_NUMBER تمام ستون های row سطرهای جدولتو بروز کنه
البته باید بر اساس ستون تاریخ وزمانی که ایجاد کردی سورت بشود.

rahil_2008
جمعه 19 تیر 1388, 21:56 عصر
هر موقع که می خواستی یک سطری از جدول را حذف کنی یا اضافه کنی با استفاده از تریگر برنامه ای بنویسی که با استفاده از ROW_NUMBER تمام ستون های row سطرهای جدولتو بروز کنه
البته باید بر اساس ستون تاریخ وزمانی که ایجاد کردی سورت بشود.
سلام دوست عزیز
ببخشید من زیاد sql وارد نیستم. منظورتون را متوجه نمی شم؟ چه جوری با استفاده از زمان و ردیف می تونم به سیستم بفهمونم که پس از انجام عملیات حذف، دوباره ستون row را sort کنه؟

ASKaffash
شنبه 20 تیر 1388, 14:38 عصر
سلام
روش نگهداری Row پشت سر هم در جدول روش خوبی نیست سئوال اینجاست چرا به این موضوع نیاز دارید ؟ مشکل اصلی را بگوئید تا راه بهتری ارائه گردد میتوان در هنگام دریافت یک Select مقدار Row را شبیه سازی کرد

rahil_2008
شنبه 20 تیر 1388, 23:36 عصر
روش نگهداری Row پشت سر هم در جدول روش خوبی نیست سئوال اینجاست چرا به این موضوع نیاز دارید ؟
سلام دوست عزیز
پس شما وقتی در یک جدول، کلید اصلی نداشته باشید چکار می کنید؟ من تنها راهی که به ذهنم رسید استفاده از row بود!

rahil_2008
یک شنبه 21 تیر 1388, 00:24 صبح
1. 1 TRIGGER tarif koni ke agar jadvale folan DELETE ya INSERT ANJAM Shod biad jadvalo update bokone hala be har sooraty ke hadafet hast ...


سلام دوست عزیز
معذرت می خوام، من زیاد به sql وارد نیستم. می شه بیشتر توضیح بدی که چه جوری موقع update کردن عمل sort هم براساس ستون row انجام بشه؟ من همون طور که در راه حل دوم هم شما گفتید sort کردن با order by را برای select بلدم ولی برای update نمی دونم چه جوری می شه؟!
یه سوال دیگه: این عمل sort ، همون identity تعریف کردنه یا اینکه فقط مرتب سازی می کنه؟ هدف من اینه که با هر عملیات delete یه بار دیگه identity تعریف کنه، یعنی اگر سطر اولو حذف کردم سطر دومو جایگزینش کنه و در ستون row اون 1 بنویسه.

rahil_2008
یک شنبه 21 تیر 1388, 00:28 صبح
از حالت Identity وردارد ، جدولت رو سیو کن و ببند و دوباره به حالت Identity برگردون (اگه جواب نگرفتی یک رکورد بزار و فیلد ID رو دستی مقدار دهی کن بعد به حالت Identity برگردون)

سلام
من این پایگاه داده را برای استفاده در c# میخوام بنابراین این راه حل عملی نیست.

اگر هم اینقدر مهمه که میخوای ردیف خالی نداشته باشی با تریگر مقدار ID رو بده
چه جوری؟ لطفا بیشتر توضیح بدید!

ASKaffash
یک شنبه 21 تیر 1388, 09:20 صبح
روش نگهداری Row پشت سر هم در جدول روش خوبی نیست سئوال اینجاست چرا به این موضوع نیاز دارید ؟
سلام دوست عزیز
پس شما وقتی در یک جدول، کلید اصلی نداشته باشید چکار می کنید؟ من تنها راهی که به ذهنم رسید استفاده از row بود!

سلام
دوست من هیچ ارتباطی بین PK و نمایش Row در یک برنامه کاربردی وجود ندارد به هر حال شما یک دستور Select دارید که روی یک یا چند فیلد قرار است Order By صورت گیرد پس از دریافت Query شما هم از طریق ابزارهای زبان برنامه نویسی و هم از طریق SQLServer میتوانید Row ایجاد کنید (البته از 2005 به بعد)

Emad23
یک شنبه 21 تیر 1388, 17:29 عصر
از حالت Identity وردارد ، جدولت رو سیو کن و ببند و دوباره به حالت Identity برگردون (اگه جواب نگرفتی یک رکورد بزار و فیلد ID رو دستی مقدار دهی کن بعد به حالت Identity برگردون)
سلام
من این پایگاه داده را برای استفاده در c# میخوام بنابراین این راه حل عملی نیست.

اگر هم اینقدر مهمه که میخوای ردیف خالی نداشته باشی با تریگر مقدار ID رو بده چه جوری؟ لطفا بیشتر توضیح بدید!



azize man estefade kardane row dakhele 1 table asan manaii nadare ba in chizi ke shoma migi ..
row che rabty be identity dare ... u ageh az data type uniqueidentifier estefade nemikoni ...
vaghty shoma az tabeie ROW_NUMBER estefade mikoni niazi be set kardan row dar jadavale aslit nadary khodet mitooni vaght dary select migiri 1 stoon sort ijad koni ....
nemidoonam shoma chio motevajeh nemishi?!

rahil_2008
دوشنبه 22 تیر 1388, 21:44 عصر
سلام
لطفا راهنماییم کنید

Emad23
دوشنبه 22 تیر 1388, 23:57 عصر
سلام
لطفا راهنماییم کنید


bia azize man ... in Query bara DataBase NorthWind hastesh .. ejarash Kon motevajeh mishi ...


SELECT
ROW_NUMBER() OVER(ORDER BY ProductID) 'Row Number',
ProductID,
ProductName,
UnitPrice
FROM Products
ORDER BY UnitPrice

ASKaffash
سه شنبه 23 تیر 1388, 07:53 صبح
سلام
اگر SQL شما 2000 نیست از پست 6 ایده بگیرید:
ROW_NUMBER() OVER(ORDER BY ProductID)