我讨厌数据库中的区分大小写,但我正在为使用它的客户开发。如何在我的SQL Server上启用此选项,以便我可以确定我在所有查询中都已正确使用该案例?
答案 0 :(得分:14)
如果您在需要区分大小写的表或列上声明它,实际上不需要更改整个数据库的排序规则。实际上,您可以根据需要将其实际附加到单个操作中。
SELECT name WHERE 'greg' = name COLLATE Latin1_GENERAL_CS_AS
我知道,你说过要在整个数据库中应用它。但我提到这一点是因为在某些托管环境中,您无法控制在创建数据库时设置的此属性。
答案 1 :(得分:9)
怎么样:
ALTER DATABASE database_name COLLATE collation_name
请参阅BOL了解list of collation options并选择最符合您需求的区分大小写(即您的客户正在使用的那个)。
显然,在尝试之前对数据库进行完整备份可能是个好主意。我从未尝试过使用与服务器默认排序规则不同的排序规则的数据库,因此我不知道任何“陷阱”。但是如果你有好的备份并在将它部署到你的客户端之前在你的环境中进行测试,我无法想象所涉及的风险很大。
答案 2 :(得分: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(在此示例中)的排序规则与当前数据库的排序规则相对应。
答案 3 :(得分:0)
您必须更改数据库排序规则。您还需要更改表和列级别排序规则。如果你谷歌的话,我相信你可以找到一个脚本。