Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何将SQL Server 2005更改为区分大小写?_Sql Server - Fatal编程技术网

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

Sql server 如何将SQL Server 2005更改为区分大小写?,sql-server,Sql Server,我讨厌数据库中的区分大小写,但我是为使用它的客户开发的。如何在我的SQL Server上启用此选项,以确保我在所有查询中都正确使用了大小写?您必须更改数据库排序规则。您还需要更改表和列级别的排序规则。我相信如果你用谷歌搜索它,你可以在那里找到一个脚本。如果你在需要区分大小写的表或列上声明它,你实际上不需要更改整个数据库的排序规则。实际上,您可以根据需要将其附加到单个操作中 SELECT name WHERE 'greg' = name COLLATE Latin1_GENERAL_CS_AS 选

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

您必须更改数据库排序规则。您还需要更改表和列级别的排序规则。我相信如果你用谷歌搜索它,你可以在那里找到一个脚本。

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

SELECT name WHERE 'greg' = name COLLATE Latin1_GENERAL_CS_AS 选择名称,其中“greg”=名称对照拉丁语1\u常规\u CS\u AS 我知道,你说过你希望这个应用到整个数据库。但我提到这一点是因为在某些托管环境中,您无法控制此属性,而此属性是在创建数据库时设置的。

如何:

ALTER DATABASE database_name COLLATE collation_name
请参阅BOL以获取详细信息,并选择最适合您需要的区分大小写的一个(即您的客户正在使用的一个)。

显然,在尝试之前对数据库进行完整备份可能是个好主意。我个人从未尝试使用与服务器默认排序规则不同的数据库,因此我不知道有任何“gotchas”。但是,如果您有良好的备份,并在将其部署到客户端之前在您的环境中对其进行测试,我无法想象会有太大的风险。

如果您有一个与实例默认排序规则不同的DB,则在尝试使用临时表连接表时可能会遇到问题。临时表必须对实例进行排序(因为它们是系统对象),因此您需要在联接中使用COLLATE database\u default子句

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

这会将temp.X的排序规则(在本例中)强制为当前数据库的排序规则。

但不要将LOWER()应用于列,否则它将无法使用索引…啊,感谢提示。我根据我使用的脚本改编了这句话。。。但我会处理好样品的。