将 SQL Server 的排序规则从区分大小写改为不区分大小写,应该怎样做?

44

最近我安装了SQL Server 2008,并选择了区分大小写的排序规则。我想将整个实例更改为不区分大小写(而不是在该实例中的某个数据库)。如果我更改排序规则,是否会影响现有的数据库?如果是,又会以何种方式影响?

2个回答

73

为了使用新的排序规则重建master数据库,您基本上需要再次运行安装程序。您不能以其他方式更改整个服务器的排序规则。

请查看:

更新:如果您想更改数据库的排序规则,可以使用以下T-SQL片段获取当前的排序规则:

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')

好的,谢谢提供信息。现在我至少想尝试更改数据库的排序规则以使其不区分大小写。我找到了这个“ALTER DATABASE DEV_DB COLLATE [不区分大小写键]”来实现。但是不确定用于不区分大小写的值。如果有帮助,将不胜感激! - JPReddy

2
你可以这样做,但更改将只影响在数据库中插入的新数据。长期来看,建议按照上述建议进行操作。
此外,还有一些技巧可以覆盖排序规则,例如存储过程或函数的参数、别名数据类型以及分配默认排序规则的变量。要更改别名类型的排序规则,必须先删除别名,然后重新创建。
你可以使用COLLATE子句覆盖字面字符串的默认排序规则。如果不指定排序规则,则将分配数据库的默认排序规则。您可以使用DATABASEPROPERTYEX查找数据库的当前排序规则。
您可以通过在SELECT语句的ORDER BY子句中指定排序规则来覆盖服务器、数据库或列的排序规则。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接