如何定义 SQL Server 列名大小写不敏感,但值大小写敏感?

5

我们刚刚将一些数据库迁移到了新的SQL Server 2012,并遇到了一些敏感性问题。

我们希望表格和列名不区分大小写,但是值应该区分大小写,因此

select ... where 'a'='A'

不应该返回任何行,但是

select Column from Table
select column from table

两者都应该起作用。

我们尝试将数据库(服务器默认值)从Modern_Spanish_CI_AS -> 'a'='A' is true更改为Modern_Spanish_CS_AS -> 列/表名必须匹配定义的大小写,但我们不希望这样。

有没有办法获得所需的行为?

1个回答

3
如果您选择区分大小写的排序规则,则必须确保您的查询也是区分大小写的,因为排序规则不仅适用于用户数据,还适用于元数据。
您可以通过使数据库的排序规则不区分大小写并在创建表时使用COLLATE子句,或者使用一个包含式数据库来解决这个问题。
阅读更多关于包含式数据库包含式数据库排序规则的信息。

我应该理解创建数据库时的COLLATE子句适用于元数据以及用户数据,而在创建表中的列定义中的COLLATE子句仅适用于用户数据? - DeepButi
是的。如果您的数据库是一个包含数据库,您可以避免使用列定义的COLLATE子句 - 请参见我的答案中的链接 Contained Database Collations,以及此处:https://msdn.microsoft.com/en-us/library/ff929071(v=sql.110).aspx 关于包含数据库。 - Ɖiamond ǤeezeƦ
谢谢。你是对的,我在一个列上测试了COLLATE。我们将研究哪个选项更容易,是在每个列上进行COLLATE还是包含在数据库中。 - DeepButi

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