2015-04-22 115 views
2

我们只是将某些数据库迁移到新的SQL Server 2012中,并且出现了一些敏感问题。如何定义SQL Server colum名称不区分大小写,但值区分大小写

我们想表&列名不区分大小写,但值应该是大小写敏感的,所以

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

有什么办法来获得所需的行为?

回答

3

如果选择区分大小写的归类,则必须确保查询区分大小写,因为归类适用于元数据以及用户数据。

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

了解更多关于Contained DatabasesContained Database Collations

+0

我应该明白,一个创建数据库的COLLATE子句适用于元数据以及用户数据......而列定义的在创建表COLLATE子句仅适用到用户数据? – DeepButi

+0

是的。如果您的数据库是一个包含的数据库,您可以避免使用列定义的COLLATE子句 - 请参阅我对包含的数据库归类的答案中的链接,此处:https://msdn.microsoft.com/en-us/library /ff929071(v=sql.110).aspx关于包含的数据库。 –

+0

Thks。你是对的,在列上测试COLLATE。我们将研究哪个选项更容易,整理每列或包含的数据库。 – DeepButi