如何在SQL Server 2008中删除区分大小写检查?

xor*_*wer 8 sql-server sql-server-2005 collation sql-server-2008

我刚刚安装了SQL Server 2008并导入了AdventureWorksDatabase(对于SQL 2005,与2008年一样没有用).

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

此外,智能感知也不是很好.

mar*_*c_s 12

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

select name, collation_name 
from sys.databases
Run Code Online (Sandbox Code Playgroud)

整理名称将类似于: Latin1_General_CI_AS

_CI_部分告诉我这是一个不区分大小写的排序规则.如果你看到它_CS_那么它是一个区分大小写的排序规则.

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

ALTER DATABASE AdventureWorks COLLATE ....... 
Run Code Online (Sandbox Code Playgroud)

并在此处选择任何有效的排序规则 - 使用a _CI_来获取不区分大小写的排序规则.

麻烦在于:即使您更改了数据库级别的排序规则,某些表仍可能具有在创建表时定义了特定排序规则的单个列.你也可以改变所有这些,但这将是一项更大的任务.有关详细信息和脚本,请参阅此文章以检查并可能更改表中的各个列.

智能感知可能无法正常工作的原因是数据库对象本身的区分大小写由服务器排序规则控制 - 这可能再次与任何数据库默认值不同.

要了解服务器的排序规则,请使用:

SELECT SERVERPROPERTY('Collation')
Run Code Online (Sandbox Code Playgroud)

更改服务器的系统排序规则是一个非常混乱的过程,需要您使用原始文件setup.exe,如此处所述.