SQL Server 2008数据库归类转换

Sen*_*eer 2 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

同时保留所有数据和设置(架构和登录等)? 替代文字

谢谢.

dem*_*mas 5

尝试从QA更改排序规则:

ALTER DATABASE DBNAME
COLLATE Cyrillic_General_CI_AS
Run Code Online (Sandbox Code Playgroud)

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

SELECT *
FROM ::fn_helpcollations()
Run Code Online (Sandbox Code Playgroud)

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

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'))
Run Code Online (Sandbox Code Playgroud)

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

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