ورود

View Full Version : چند سوال در مورد Sql server



jeson_park
جمعه 07 مرداد 1390, 12:06 عصر
سلام
می خواستم بدونم این ها چی هستن؟
در ویژوال استودیو در بخش ایجاد Tabale یه گزینه به اسم allow nulls هست .چه کاربردی داره ؟؟؟
در column properties قسمت identity specifaction رو برابر yes قرار می دم
حالا وقتی روی در show tabale data داده ها رو وارد می کنم اگر یکی از سطر ها رو پاک کنم ترتیب شماره گذاریشون به هم می خوره
مثلا من در جدولم ستون هایی رو به صورت زیر تعریف می کنم
customerID
Firstname
LastName
حالا وقتی در قسمت tabale data اصلاعات رو وارد می کنم CustomerID به صورت اتوماتیک از 1 شروع میشه
اما حالا فرضا اگه من 5 تا روکورد وارد کرده باشم و رکورد شماره 5 رو پاک کنم
بعد که یه رکورد جدید اضافه میکنم شماره customerID برابر 6 میشه(نه 5)
برای حل این مشکل باید چیکار کنم؟
http://up.iranblog.com/images/az4q2kaw6xemixp4m7fa_thumb.png (http://up.iranblog.com/viewer.php?file=az4q2kaw6xemixp4m7fa.png)


سوال دیگه من اینه که اگه بخوایم یه رکورد هم عدد بگیره هم حروف از چه نوع داده ای استفاده کنیم؟؟
ممنون می شم

یوسف زالی
جمعه 07 مرداد 1390, 17:04 عصر
سلام.
allow null یا توانایی null شدن برای مواقعی خوب هست که شما برای این ستون داده ای ندارید.
مثلا ستونی را در نظر بگیرید که متاهل و مجرد بودن را ذخیره می کند.
اگر متاهل بود یک و اگر مجرد بود 0.
حالا اگر ندانید که یک شخص متاهل است یا مجرد Null وارد می کنید.

identity هم برای هر ردیفی که وارد شده به اندازه ای که تعیین می شه از آخرین مقداری که داشت زیاد می شه حتی اگر آخرین مقدار دیگه موجود نباشه.
اگر روش دیگه ای مثلا شماره ردیف لازم دارید این کار رو موقع سلکت با روشهای متنوعی می تونید کنید.

برای نوع داده هم می تونید رشته بگیرید و وقتی که می خواهید اونها رو به عدد تبدیل کنید.
البته راهی رو برای تشخیص بگذارید. مثلا در فیلد دیگری نوع داده رو ذخیره کنید.
یا اول همین داده ها یک کاراکتر که ازش استفاده نمی کنید بگذارید تا اونهایی که این کاراکتر رو ندارند عدد باشند...

بستگی به کاربرد شما داره

jeson_park
جمعه 07 مرداد 1390, 20:14 عصر
اگر روش دیگه ای مثلا شماره ردیف لازم دارید این کار رو موقع سلکت با روشهای متنوعی می تونید کنید.
بستگی به کاربرد شما داره
با تشکر از شما
میشه یه مثال عملی بزنید؟؟
تو پست اول گفتم بعد از پر کردن چند رکور وقتی یه رکورد رو حذف می کنم و بعد 2 باره شروع به وارد کردن رکور جدیدی می کنم این شماره گذاری ترتیبی یه هم می خوره
ممنون میشم اگه یه مشثال برای حل این مشکل بزنید

یوسف زالی
جمعه 07 مرداد 1390, 20:28 عصر
مواقعی که نیاز به شماره ردیف دارید ساده تر از همه درست کردن اون در برنامه هست.
مثلا اگر از ADO استفاده کردید RecNo می تونه یک راه باشه.
اما در خود SQL چند تا راه:
نتیجه سلکت رو بریزید در جدول موقتی که یکی از فیلدهاش identity هست.
یه راه دیگه استفاده از row_Number() هست...
یه سرچی بزنید مطلب زیاد هست.

Galawij
شنبه 08 مرداد 1390, 08:36 صبح
تو پست اول گفتم بعد از پر کردن چند رکور وقتی یه رکورد رو حذف می کنم و بعد 2 باره شروع به وارد کردن رکور جدیدی می کنم این شماره گذاری ترتیبی یه هم می خوره
ممنون میشم اگه یه مشثال برای حل این مشکل بزنید
دوست عزیز jeson_park
شما برای حل مشکلتون می تونید از دستورات خود Sql استفاده کنید تا همیشه بعد از اینکه رکوردی را در جدول حذف کردید از ID رکورد ماقبل رکورد حذف شده ادامه شماره گذاری ها صورت گیرد. به این صورت:
Declare @MaxId INT
Select @MaxId=MAX(YourIdFieldName) From YourTableName
DBCC CHECKIDENT('YourTableName'),RESEED,@MaxId)
و در صورتی که همه رکوردهای یک جدول را حذف کرده باشید برای اینکه شماره ردیف ها در عملیات Insert جدید دوباره از یک شروع شود به این صورت عمل کنید:
DBCC CHECKIDENT('YourTableName'),RESEED,0)