【问题标题】:How to define SQL Server colum name case insensitive but values case sensitive如何定义 SQL Server 列名不区分大小写但值区分大小写
【发布时间】:2015-06-29 20:05:25
【问题描述】:

我们刚刚将一些数据库迁移到新的 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 -> the column/table names must match the defined case

有什么方法可以得到想要的行为吗?

【问题讨论】:

    标签: sql-server collation


    【解决方案1】:

    如果您选择区分大小写的排序规则,则必须确保您的查询区分大小写,因为排序规则适用于元数据和用户数据。

    您可以通过使数据库的排序规则不区分大小写并在创建表时使用 COLLATE 子句来解决此问题,或者使用包含的数据库。

    阅读更多关于Contained Databases和Contained Database Collations的信息

    【讨论】:

    • 我是否应该理解创建数据库的 COLLATE 子句适用于元数据以及用户数据......而创建表中列定义的 COLLATE 子句仅适用于用户数据?
    • 是的。如果您的数据库是包含数据库,您可以避免使用列定义的 COLLATE 子句 - 请参阅我对包含数据库排序规则的回答中的链接,以及此处:msdn.microsoft.com/en-us/library/ff929071(v=sql.110).aspx 关于包含数据库。
    • 谢谢。你是对的,在列上测试了 COLLATE。我们将研究哪个选项更容易,对每一列或包含的数据库进行整理。
    猜你喜欢
    • 2012-05-13
    • 1970-01-01
    • 2013-03-06
    • 2012-02-03
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    相关资源
    最近更新 更多