sql-server - 如何删除 SQL Server 2008 中的区分大小写检查?

标签 sql-server sql-server-2008 sql-server-2005 collation

我刚刚安装了 SQL Server 2008 并导入了 AdventureWorksDatabase(对于 SQL 2005,对于 2008 不起作用)。

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

另外,智能感知也不太有效。

最佳答案

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

select name, collation_name 
from sys.databases

排序规则名称类似于:Latin1_General_CI_AS

_CI_ 部分告诉我这是一个不区分大小写的排序规则。如果您看到 _CS_,则它是区分大小写的排序规则。

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

ALTER DATABASE AdventureWorks COLLATE ....... 

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

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

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

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

SELECT SERVERPROPERTY('Collation')

更改服务器的系统排序规则是一个相当困惑的过程,需要您使用原始的 setup.exe 作为 explained here .

关于sql-server - 如何删除 SQL Server 2008 中的区分大小写检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3192512/

相关文章:

sql - 如何撤消 SQL Server UPDATE 查询?

sql - 使用 group by 检索主键上的聚合行

java - 如何发送整数和字符串作为 JsonObjectRequest 的参数 (Android)

C# smo 项目程序集未引用错误

sql - 在 MS SQL Server 2008 中创建序列

sql-server-2008 - SQLServer 对象 'name' 的定义自编译后发生了变化

c# - 通过字符串和 varchar(max) 之间的比较来更新查询

c# - 非常慢的 ExecuteNonQuery(存储过程)与使用 SQL Server Management Studio 的快速执行

mysql - CAST(0x993902CE AS DATETIME) 从 SQL Server 到 MYSQL

sql-server - 复合主键和对自然/代理键使用的影响