如何将SQL Server 2005更改为区分大小写?

7

我讨厌数据库的大小写敏感性,但是我正在为一个使用它的客户开发。我该如何在我的SQL Server上启用此选项,以便我可以确保在所有查询中都正确使用了大小写?

4个回答

14

如果只需要区分大小写的话,您实际上并不需要更改整个数据库的排序规则。可以在需要区分大小写的表或列上声明排序规则。事实上,您甚至可以根据需要将其附加到单个操作中。

SELECT name WHERE 'greg' = name COLLATE Latin1_GENERAL_CS_AS

我知道,您说希望在整个数据库中应用这个设置。但我提到这点是因为在某些托管环境下,您无法控制此属性,该属性是在创建数据库时设置的。


2
但不要对该列应用LOWER()函数,否则它将无法使用索引... - Mitch Wheat
啊,谢谢你的提示。我从我使用的脚本中改编了那一行...但我会修复这个示例。 - harpo

9
怎么样:
ALTER DATABASE database_name COLLATE collation_name

请参阅 BOL 获取排序选项列表,选择最适合您需求的区分大小写的选项(即您的客户正在使用的选项)。 显然,在尝试此操作之前,最好对数据库进行完整备份。我个人从未尝试过使用与服务器默认排序不同的排序来使用数据库,因此我不知道是否存在任何“陷阱”。但是,如果您有良好的备份并在部署到客户端之前在您的环境中进行测试,我认为几乎没有风险。

1

如果您的数据库与实例默认排序规则不同,那么在尝试将表与临时表连接时可能会遇到问题。 临时表必须具有实例的排序规则(因为它们是系统对象),因此您需要在连接中使用COLLATE database_default子句。

select temp.A, table.B
from #TEMPORARY_TABLE temp inner join table
on temp.X COLLATE database_default = table.Y

这将强制 temp.X(在此示例中)的排序规则与当前数据库的排序规则相同。


0

您需要更改数据库排序规则。您还需要修改表和列级别的排序规则。如果您在谷歌上搜索,我相信您可以找到一个相关的脚本。


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