SQL Server 2008数据库归类转换

时间:2010-12-10 03:11:42

标签: sql-server collation

我想配置具有“ Latin1_General_CP1_CI_AS ”的确切要求排序规则的数据库但由于某种原因在SQL Server 2008中,我只能选择“ SQL_Latin1_General_CP1_CI_AS ”?

如何选择正确的排序规则并将其从 SQL_Latin1_General_CP1_CI_AS 更改为 Latin1_General_CP1_CI_AS

同时保留所有数据和设置(架构和登录等)? alt text

感谢。

1 个答案:

答案 0 :(得分:5)

尝试从QA更改排序规则:

ALTER DATABASE DBNAME
COLLATE Cyrillic_General_CI_AS

您可以通过查询找到所有可能的排序规则:

SELECT *
FROM ::fn_helpcollations()

如果数据库中的字段具有不同的排序规则,则需要将其转换为:

SELECT  'ALTER TABLE ['+ 
        rtrim(TABLE_NAME)+
        '] ALTER COLUMN ['+
        rtrim(COLUMN_NAME)+
        '] '+
        rtrim(DATA_TYPE)+
    CASE WHEN NOT(CHARACTER_MAXIMUM_LENGTH IS NULL) OR (CHARACTER_MAXIMUM_LENGTH=0)
        THEN '('+convert(varchar(10),CHARACTER_MAXIMUM_LENGTH)+')'
    END+
    ' COLLATE Latin1_General_CI_AS' COLLATE Latin1_General_CI_AS 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE   (TABLE_CATALOG=DB_NAME() COLLATE Latin1_General_CI_AS) AND 
        ((DATA_TYPE LIKE '%char%' COLLATE Latin1_General_CI_AS) OR (DATA_TYPE LIKE '%text%' COLLATE Latin1_General_CI_AS)) AND
        (COLLATION_NAME IS NOT NULL) AND
        (COLLATION_NAME <> 'Latin1_General_CI_AS' COLLATE Latin1_General_CI_AS) AND 
        TABLE_NAME in (SELECT o.name 
                    FROM sysobjects o 
                    WHERE     (o.xtype = 'U'))

如果数据库排序规则和SQL Server排序规则不同,您可能会遇到TempDb问题。基本上,您需要再次运行安装以使用新的排序规则重建master数据库。您无法以任何其他方式更改整个服务器的排序规则。

无论如何,我认为使用新的排序规则安装新的MS SQL Server实例会更容易:)