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?
同时保留所有数据和设置(架构和登录等)?

谢谢.
尝试从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实例更容易:)