PDA

View Full Version : تشخیص و تغییر توع فیلد



سار
چهارشنبه 29 آذر 1385, 10:58 صبح
سیستمی تحت وب به من دادن که به اون دسترسی مستقیم ندارم.
فقط محیطی به من داده شده که میتونم دستورات SQL رو به شکل عادی یا Script اجرا کنم.
حالا با این پیش فرض مشکل اینه که :
جدولی دارم که نمیدونم نوع فیلدش چیه فقط چون اطلاعات فارسی رو به شکل ؟؟؟ نمایش میده حدس میزنم که VarChar باشه به جای NVarChar. حالا میخوام بدونم راهی هست که با این شکل دسترسی من بشه نوع فیلد رو شناسایی کرد و تغییر داد؟

سار
چهارشنبه 29 آذر 1385, 11:16 صبح
حالا یقین دارم که نوع فیلد VarChar تعریف شده.
چطور میتونم با دستورات SQL نوع فیلد رو عوض کنم؟

Amin61
چهارشنبه 29 آذر 1385, 11:43 صبح
شما در صورتی میتونید نوع فیلد رو عوض کنید که به شما این اجازه رو داده باشند. که بعید میدونم.شما راهی به جز تماس با DBA ندارید. مگر اینکه بتوانید با ( user sa sql server) به sql وصل بشید و تغیرات لازم رو بدید که امکانش هست چون طراحی که فیلدی رو که قرار اطلاعات فارسی رو بگیره varchar تعریف کنه نمیتونه امنیت سیستمش بالا باشه.

reza_rad
چهارشنبه 29 آذر 1385, 11:54 صبح
برای سوال اول:

از جدول sysobject می تونید id جدول رو پیدا کنید
از جدول syscolumn می تونید ستونهای اون جدول رو پیدا کنید
داخل همین syscolumns یکی از فیلدها XType هست که نوع فیلد رو مشخص می کنه
منتها این نوع به id هست و برای دیدن نوع باید از جدول systypes استفاده کنید.


برای سوال دوم:


ALTER TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name
{
ALTER COLUMN column_name
{
[ type_schema_name. ] type_name [ ( { precision [ , scale ]
| max | xml_schema_collection } ) ]
[ COLLATE collation_name ]
[ NULL | NOT NULL ]
| {ADD | DROP } { ROWGUIDCOL | PERSISTED }
| DROP NOT FOR REPLICATION
}
| [ WITH { CHECK | NOCHECK } ] ADD
{
<column_definition>
| <computed_column_definition>
| <table_constraint>
} [ ,...n ]
| DROP
{
[ CONSTRAINT ] constraint_name
[ WITH ( <drop_clustered_constraint_option> [ ,...n ] ) ]
| COLUMN column_name
} [ ,...n ]
| [ WITH { CHECK | NOCHECK } ] { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [ ,...n ] }
| { ENABLE | DISABLE } TRIGGER
{ ALL | trigger_name [ ,...n ] }
| SWITCH [ PARTITION source_partition_number_expression ]
TO [ schema_name. ] target_table
[ PARTITION target_partition_number_expression ]
}
[ ; ]

<drop_clustered_constraint_option> ::=
{
MAXDOP = max_degree_of_parallelism
| ONLINE = {ON | OFF }
| MOVE TO { partition_scheme_name ( column_name ) | filegroup
| "default"}
}



البته همه اینها در صورتی هست که دسترسی های مربوطه رو داشته باشید.

سار
چهارشنبه 29 آذر 1385, 12:28 عصر
با تشکر. من از کد زیر استفاده کردم :


ALTER TABLE Article_Comments
ALTER column [Name] TYPE nvarchar(100),
ALTER column Email TYPE nvarchar(100),
ALTER column Comment TYPE nvarchar(2000)


ولی با خطای :


Msg 102, Level 15, State 1, Line 2
Incorrect syntax near 'nvarchar'.


روبه رو شدم.
ممکنه راهنمایی کنید.

ZSe
چهارشنبه 29 آذر 1385, 13:37 عصر
ALTER TABLE MyTableName ALTER COLUMN [MyFieldName] [nvarchar] (200) NULL
GO

reza_rad
چهارشنبه 29 آذر 1385, 13:44 عصر
ببخشید من Syntax اشتباه گذاشتم. البته شبیه اند تا حدودی...

مثال:



ALTER TABLE Article_Comments ALTER COLUMN email NVARCHAR(2000) NOT NULL


http://msdn2.microsoft.com/en-us/library/ms190273.aspx

سار
چهارشنبه 29 آذر 1385, 14:02 عصر
البته اشکال از Syntax شما نبود نمونه کدی هم که من در یکی از سایتها دیدم دقیقن همین بود ولی با کد دوم شما مشکل حل شد.
تشکر.