2010-07-07 99 views
7

我刚刚安装了SQL Server 2008并导入了AdventureWorksDatabase(对于SQL 2005,对于2008无法正常工作)。如何删除SQL Server 2008中的区分大小写检查?

现在,当我搜索任何表,视图等时强制区分大小写 因此,Person.contact表写入时抛出无效列名的错误,但是当写入Person.Contact时,它会显示所有行。

再加上intellisense也不太好。

select name, collation_name 
from sys.databases 

归类名会是这样的: -

回答

11

区分大小写是由数据库使用的排序规则控制通过查询系统目录视图检查该Latin1_General_CI_AS

_CI_部分告诉我在这里,这是一个不区分大小写整理。如果您看到_CS_,那么这是一个区分大小写整理。

可以使用更改数据库的默认排序规则:

ALTER DATABASE AdventureWorks COLLATE ....... 

,在这里选择任何有效的归类 - 用一用一_CI_得到一个不区分大小写的排序规则。

问题是:即使您更改数据库级别的排序规则,某些表可能仍然具有单个列,该列在创建表时已经定义了特定的排序规则。你也可以改变所有这些,但这将是一个更大的事业。有关更多信息和脚本,请参阅this article以检查并可能更改表格中的各个列。

智能感知可能无法正常工作的原因是数据库对象本身的大小写敏感性受服务器排序规则控制 - 它可能会再次与任何数据库默认设置不同。

要了解服务器的排序规则是什么,可以使用:

SELECT SERVERPROPERTY('Collation') 

更改服务器的系统整理是一个相当混乱的过程,并需要您使用原来的setup.exeexplained here

2

这里的问题是表名联系人的区分大小写。您应该设置数据库的AdventureWorks的collation_nameLatin1_General_CI_AS

检查COLLATION_NAME:

SELECT name, collation_name 
FROM sys.databases 
WHERE name = 'AdventureWorks'; 
GO 

如果collation_nameLatin1_General_BINLatin1_General_CS_AS将其更改为Latin1_General_CI_AS

ALTER DATABASE AdventureWorks 
COLLATE Latin1_General_CI_AS ; 
GO 

如果数据库已锁定做这个动作“数据库不能独占锁定o执行操作。“。改变数据库到单用户

,做

ALTER DATABASE AdventureWorks 
COLLATE Latin1_General_CI_AS ; 
GO 

恢复数据库,多用户终于

ALTER DATABASE AdventureWorks SET MULTI_USER WITH ROLLBACK IMMEDIATE 

或者

可以在数据库属性更改排序规则。

enter image description here