【发布时间】:2011-03-18 19:23:11
【问题描述】:
我最近安装了 SQL Server 2008,并选择了排序规则区分大小写。我想让整个实例(而不是该实例中的数据库)不区分大小写。如果我更改排序规则,它会影响任何现有数据库吗?如果是,以什么方式?
【问题讨论】:
标签: sql-server sql-server-2008 collation
我最近安装了 SQL Server 2008,并选择了排序规则区分大小写。我想让整个实例(而不是该实例中的数据库)不区分大小写。如果我更改排序规则,它会影响任何现有数据库吗?如果是,以什么方式?
【问题讨论】:
标签: sql-server sql-server-2008 collation
您基本上需要再次运行安装以使用新排序规则重建master 数据库。您不能以任何其他方式更改整个服务器的排序规则。
见:
更新:如果要更改数据库的排序规则,可以使用 T-SQL 的这个 sn-p 获取当前排序规则:
SELECT name, collation_name
FROM sys.databases
WHERE name = 'test2' -- put your database name here
这将产生一个类似的值:
Latin1_General_CI_AS
_CI 表示“不区分大小写” - 如果您想区分大小写,请使用 _CS 代替:
Latin1_General_CS_AS
所以你的 T-SQL 命令是:
ALTER DATABASE test2 -- put your database name here
COLLATE Latin1_General_CS_AS -- replace with whatever collation you need
您可以使用以下方法获取服务器上所有可用排序规则的列表:
SELECT * FROM ::fn_helpcollations()
您可以使用以下命令查看服务器的当前排序规则:
SELECT SERVERPROPERTY ('Collation')
【讨论】:
您可以这样做,但更改会影响插入数据库的新数据。从长远来看,请按照上面的建议进行操作。
还有一些技巧可以覆盖排序规则,例如存储过程或函数的参数、别名数据类型以及为变量分配数据库的默认排序规则。要更改别名类型的排序规则,您必须删除别名并重新创建它。
您可以使用 COLLATE 子句覆盖文字字符串的默认排序规则。如果您不指定排序规则,则会为文字分配数据库默认排序规则。您可以使用 DATABASEPROPERTYEX 来查找数据库的当前排序规则。
您可以通过在 SELECT 语句的 ORDER BY 子句中指定排序规则来覆盖服务器、数据库或列排序规则。
【讨论】: