PDA

View Full Version : سوال: تغییر Collation فیلدهای یک دیتابیس [T-Sql]



Sub Zero
دوشنبه 27 خرداد 1387, 11:06 صبح
سلام .
من دنبال کدی هستم که با استفاده از اون بتونم Collation تک تک فیلدهای جداولم رو چک کنم و درصورتی که Arabic هست به Default تغییر بدم .
چون تعداد جداول دیتابیس و همچنین تعداد فیلدهای جداول زیادن انجام این کار به صورت دستی زمان میبره . ممنون میشم در این صمینه راهنمایی کنید.

Sub Zero
دوشنبه 27 خرداد 1387, 15:37 عصر
بالاخره دست و پا شکسته یه چیزایی نوشتیم :


set nocount on
DECLARE @Table_Name nvarchar(64),@Column_Name nvarchar(64),@DATA_TYPE nvarchar(64),@IS_NULLABLE nvarchar(64),@CHARACTER_MAXIMUM_LENGTH int,@sql nvarchar(10)

DECLARE TableCursor CURSOR FOR
select Table_Name,Column_Name,DATA_TYPE,IS_NULLABLE,CHARA CTER_MAXIMUM_LENGTH from INFORMATION_SCHEMA.COLUMNS where collation_Name<>''

open TableCursor

FETCH NEXT FROM TableCursor INTO @Table_Name,@Column_Name,@DATA_TYPE,@IS_NULLABLE,@ CHARACTER_MAXIMUM_LENGTH
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @sql= 'ALTER TABLE [' + @TABLE_NAME +
'] ALTER COLUMN [' + @COLUMN_NAME + '] ' + @DATA_TYPE +
CASE WHEN @CHARACTER_MAXIMUM_LENGTH = -1 then '(max)'
WHEN @DATA_TYPE in ('text','ntext') then ''
WHEN @CHARACTER_MAXIMUM_LENGTH IS NOT NULL
THEN '('+(CONVERT(VARCHAR,@CHARACTER_MAXIMUM_LENGTH)+') ' )
ELSE isnull(CONVERT(VARCHAR,@CHARACTER_MAXIMUM_LENGTH), ' ')
END
+ ' COLLATE SQL_Latin1_General_CP1_CI_AS ' +
CASE @IS_NULLABLE
WHEN 'YES' THEN 'NULL'
WHEN 'No' THEN 'NOT NULL'
End
Exec (@sql)
FETCH NEXT FROM TableCursor INTO @Table_Name,@Column_Name,@DATA_TYPE,@IS_NULLABLE,@ CHARACTER_MAXIMUM_LENGTH
END
CLOSE TableCursor
DEALLOCATE TableCursor

تنها عیبش اینه که فیلدهایی که روی اونها ایندکس گذاشته شده رو تغییر نمیده
منبع (http://drsql.spaces.live.com/blog/cns!80677FB08B3162E4!853.entry)