Sql server SQL Server 2008数据库排序规则转换

Sql server SQL Server 2008数据库排序规则转换,sql-server,collation,Sql Server,Collation,我想用Latin1_General_CP1_CI_AS的精确需求排序配置数据库,但由于某些原因,在SQL Server 2008中,我只能选择SQL_Latin1_General_CP1_CI_AS 如何选择适当的排序规则并将其从SQL\u Latin1\u General\u CP1\u CI\u AS更改为Latin1\u General\u CP1\u CI\u AS,同时保留所有数据、设置模式和登录名等 尝试从QA更改排序规则: ALTER DATABASE DBNAME COLLATE

我想用Latin1_General_CP1_CI_AS的精确需求排序配置数据库,但由于某些原因,在SQL Server 2008中,我只能选择SQL_Latin1_General_CP1_CI_AS

如何选择适当的排序规则并将其从SQL\u Latin1\u General\u CP1\u CI\u AS更改为Latin1\u General\u CP1\u CI\u AS,同时保留所有数据、设置模式和登录名等


尝试从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可能会出现问题。基本上,您需要再次运行安装以使用新的排序规则重建主数据库。您不能以任何其他方式更改整个服务器的排序规则


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

谢谢Demas,因此在这种情况下,我将把ALTER数据库DBNAME COLLATE Cyrillic_General_CI_AS更改为我当前的排序规则,对吗?是的,但请使用SELECT*FROM::fn_HELP COLLATIONS检查您自己