ورود

View Full Version : تغییر نوع یک ستون sql



Amin69
پنج شنبه 10 مرداد 1392, 15:32 عصر
سلام.
1. من یه ستون از نوع int توی یک جدول sql دارم که حالا میخوام به nvarchar تبدیلش کنم.
پایگاه داده من به پروژه attach شده. از قسمت sql-server سی شارپ نوع اون ستون رو تغییر دادم ولی وقتی برنامه رو اجرا میکنم، همون نوع قبلی (int) هست. اشکال از کجاست؟
2. چطوری میشه با C#‎ نوع یک ستون رو عوض کرد؟

محمد سلیم آبادی
پنج شنبه 10 مرداد 1392, 15:57 عصر
سلام،
به عنوان توصیه همیشه در همان ابتدای طراحی جدول data type های مناسب برای ستون های خود انتخاب کنید که بعدها مجبور به تغییر آن نشوید از این نظر که این تغییر برای شما پرهزینه خواهد بود مخصوصا اگر داده های بسیار زیادی در جدول درج شده باشد (اینجا (http://puresql.blogsky.com/1392/05/10/post-9/%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1%D8%A7%D8%AA-%D8%B3%D8%A7%D8%AF%D9%87-%D8%B1%D9%88%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1-%D8%AC%D8%AF%D9%88%D9%84-%D9%88-%D8%B1%D9%88%DB%8C%D8%AF%D8%A7%D8%AF-%D9%87%D8%A7%DB%8C-%DA%AF%D8%B3%D8%AA%D8%B1%D8%AF%D9%87-%DB%8C-%D9%BE%D8%B4%D8%AA-%D9%BE%D8%B1%D8%AF%D9%87))

اگر قصد دارید توسط t-sql تغییرات را ایجاد کنید کد به این شکل است:

ALTER TABLE <table_name>
ALTER COLUMN <column_name>
varchar(50);
در placeholder ها نام جدول و نام ستون خود را بگذارید.

البته همیشه توسط دستور alter امکان تغییر در ستون وجود ندارد مثلا زمانی که اشیائی وابسته به این ستون هستند...

Amin69
پنج شنبه 10 مرداد 1392, 16:18 عصر
اگر قصد دارید توسط t-sql تغییرات را ایجاد کنید کد به این شکل است:

ALTER TABLE <table_name>
ALTER COLUMN <column_name>
varchar(50);
در placeholder ها نام جدول و نام ستون خود را بگذارید.

ممنون، دو تا سوال برام پیش اومد:
1- معادل این کدی که نوشتید توی #C یا vb چیه؟
2- اگه یه مقدار عددی داشته باشیم ولی قرار نیست محاسبه ای روی اون انجام بشه، بهتره که در sql از int استفاده کنیم یا nvarchar ؟

محمد سلیم آبادی
پنج شنبه 10 مرداد 1392, 16:38 عصر
- معادل این کدی که نوشتید توی #C یا vb چیه؟
معادل نیاز ندارد. شما چطور دستورات مثلا SELECT را در #C اجرا میکنید. این هم همینطور اجرا کنید. برای اینکه مطمئن بشین باید سوالتون را در تالارهای مربوط بپرسین. ولی فکر نمی کنم برای دستورات DDL معادلی وجود داشته باشه. مثلا میشه توسط LINQ پرس و جو (query) نوشت.
مگر شما به SQL Server Management Studio دسترسی ندارید که برید راحت از طریق محیط گرافیکی نوع داده خودتون رو تغییر بدین؟


- اگه یه مقدار عددی داشته باشیم ولی قرار نیست محاسبه ای روی اون انجام بشه، بهتره که در sql از int استفاده کنیم یا nvarchar ؟
قبل از هر چیزی لازمه بگم که نوع nvarchar دو برابر نوع varchar فضا اشغال میکنه. و از آنجایی که فقط قصد ذخیره اعداد را دارید هیچ وقت با کدهای uni code سرو کار نخواهید داشت پس nvarchar خط میخوره.
حالا باید دید که این عدد به عنوان یک چیزی مثل شماره تلفن یا شماره ملی قرار هست استفاده بشه و هیچ وقت کوچکتر بزرگتر یا اعمال محاسبات ریاضی روی آن معنایی نداره میتونید نوع varchar یا char رو انتخاب کنید.
ولی در این حالت برای اینکه مطمئن بشید که فقط ارقام عددی در جدول ذخیره میشن بایستی یک قید check رو آن بگذارید خب کار تا حدودی سخت میشه...