2010-07-07 37 views
7

Tôi vừa cài đặt SQL Server 2008 và AdventureWorksDatabase đã nhập (đối với SQL 2005, cho năm 2008 không hoạt động).Làm thế nào để loại bỏ trường hợp kiểm tra nhạy cảm trong SQL Server 2008?

Hiện tại, nó đang thực thi độ nhạy trường hợp khi tôi tìm kiếm bất kỳ bảng, dạng xem, v.v. Do đó bảng Person.contact khi viết ném lỗi Tên cột không hợp lệ, nhưng khi Person.Contact được ghi nó hiển thị tất cả các hàng.

Cộng với quá trình intellisense cũng không hoạt động tốt.

Trả lời

11

Trường hợp nhạy cảm được điều khiển bởi các collation cơ sở dữ liệu sử dụng - kiểm tra điều này bằng cách truy vấn các khung nhìn danh mục hệ thống:

select name, collation_name 
from sys.databases 

Một tên đối chiếu sẽ là một cái gì đó như: Latin1_General_CI_AS

Phần _CI_ là nói cho tôi ở đây rằng đây là một collation không phân biệt chữ hoa chữ thường. Nếu bạn thấy số _CS_ thì đó là số nhạy cảm với trường hợp đối chiếu.

Bạn có thể thay đổi collation mặc định của một cơ sở dữ liệu sử dụng:

ALTER DATABASE AdventureWorks COLLATE ....... 

và chọn bất kỳ đối chiếu hợp lệ ở đây - sử dụng một với một _CI_ để có được một collation case-insensitive.

Sự cố là: ngay cả khi bạn thay đổi đối chiếu ở cấp cơ sở dữ liệu, một số bảng nhất định vẫn có thể có cột riêng lẻ có một collation cụ thể được xác định khi bảng được tạo. Bạn cũng có thể thay đổi tất cả những điều này, nhưng đó sẽ là một cam kết lớn hơn. Xem this article để biết thêm thông tin và tập lệnh để kiểm tra và có thể thay đổi các cột riêng lẻ trong bảng của bạn.

Lý do intellisense có thể không hoạt động đúng là độ nhạy trường hợp của các đối tượng cơ sở dữ liệu được kiểm soát bởi máy chủ collation - có thể khác với bất kỳ cơ sở dữ liệu mặc định.

Để tìm hiểu những gì đối chiếu của máy chủ là, sử dụng:

SELECT SERVERPROPERTY('Collation') 

Thay đổi hệ thống chiếu của máy chủ là một quá trình khá lộn xộn và đòi hỏi bạn phải sử dụng bản gốc setup.exe như explained here.

2

Vấn đề ở đây là Phân biệt chữ hoa chữ thường của tên bảng Liên hệ. Bạn nên đặt collation_name của AdventureWorks Cơ sở dữ liệu như Latin1_General_CI_AS

Kiểm tra collation_name:

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

Nếu collation_nameLatin1_General_BIN hoặc Latin1_General_CS_AS thay đổi nó để Latin1_General_CI_AS

ALTER DATABASE AdventureWorks 
COLLATE Latin1_General_CI_AS ; 
GO 

Nếu cơ sở dữ liệu đã bị khóa để thực hiện hành động này "Cơ sở dữ liệu không thể bị khóa độc quyền o thực hiện thao tác. ".Thay đổi cơ sở dữ liệu để người dùng đơn

và làm

ALTER DATABASE AdventureWorks 
COLLATE Latin1_General_CI_AS ; 
GO 

Hoàn nguyên lại cơ sở dữ liệu để đa tài cuối cùng

ALTER DATABASE AdventureWorks SET MULTI_USER WITH ROLLBACK IMMEDIATE 

Hoặc

Bạn có thể thay đổi Collation trong Properties Cơ sở dữ liệu .

enter image description here

Các vấn đề liên quan