Wednesday, July 10, 2013

SQL Server: Store Procedure สำหรับแปลง Collation ของทุก fields ในทุก table

declare @SQLText nvarchar(500)
declare @TableName nvarchar(100)
declare @ColumnName nvarchar(100)
declare @DataType nvarchar(100)
declare @CharacterMaxLen nvarchar(100)
declare @IsNullable nvarchar(100)
declare @CollationName nvarchar(100)

set @CollationName = 'SQL_Latin1_General_CP1_CI_AS'

DECLARE MyColumnCursor Cursor FOR
SELECT TABLE_NAME,COLUMN_NAME,DATA_TYPE, CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE from information_schema.columns
WHERE (Data_Type LIKE '%char%' OR Data_Type LIKE '%text%') AND COLLATION_NAME <> @CollationName
ORDER BY TABLE_NAME,ordinal_position
Open MyColumnCursor

FETCH NEXT FROM MyColumnCursor INTO @TableName,@ColumnName, @DataType, @CharacterMaxLen, @IsNullable
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQLText = 'ALTER TABLE ' + @TableName + ' ALTER COLUMN [' + @ColumnName + '] ' + @DataType + '(' + CASE WHEN @CharacterMaxLen = -1 THEN 'MAX' ELSE @CharacterMaxLen END + ') COLLATE ' + @CollationName + ' ' + CASE WHEN @IsNullable = 'NO' THEN 'NOT NULL' ELSE 'NULL' END
PRINT @SQLText

FETCH NEXT FROM MyColumnCursor INTO @TableName,@ColumnName, @DataType, @CharacterMaxLen, @IsNullable
END
CLOSE MyColumnCursor
DEALLOCATE MyColumnCursor

No comments: