如果一个 SQL Server 的服务器排序规则是大小写敏感的,而数据库是大小写不敏感的,查询是否区分大小写?

3
如果一个 SQL Server 的服务器排序规则是区分大小写的,而数据库则不区分大小写,那么查询是否区分大小写呢?我以为这应该是基于数据库而不是服务器排序规则的,但经过简短测试似乎并非如此。有人确定吗?
2个回答

5
我想这里解释了它:
标识符的排序规则取决于其定义的级别。实例级对象(例如登录名和数据库名称)的标识符将被分配实例的默认排序规则。数据库内对象(例如表、视图和列名)的标识符将被分配该数据库的默认排序规则。当连接上下文与一个数据库相关联,然后在上下文已切换到另一个数据库时引用变量、GOTO标签、临时存储过程和临时表时,可以创建这些对象。因此,变量、GOTO标签和临时表的标识符位于实例的默认排序规则中。
这意味着变量(包括参数)在不区分大小写的排序规则中也是区分大小写的。这就是我在测试中看到的问题:参数的大小写有问题,但表/列名的大小写没有问题。

1
当你使用临时表时,会更加有趣。它们也都具有服务器级别的排序规则,在处理来自不同排序规则数据库的数据时会很有趣。 - Philip Kelley
为了让它更有趣,你可以改变临时数据库的默认排序规则,得到一些非常令人困惑的结果。 - David Parvin

0

在编程中,可以在不同的级别上指定排序规则 - 它也可以在列级别上设置,这将是优先使用的级别。通常,列的排序规则设置为使用数据库默认值,除非在创建数据库时明确指定,否则将默认使用服务器的排序规则。

请注意,如果您使用一种排序规则创建数据库,然后更改数据库的排序规则,它不会影响已定义其他排序规则的现有列。它只会对从那个时间点开始为该数据库创建的列生效。因此,您需要修改现有的列。

你做了什么测试?


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