2010-07-07 72 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