2009-01-27 57 views
32

Làm cách nào để tạo một ràng buộc duy nhất trên trường varchar phân biệt chữ hoa chữ thường (SQL Server 2005)?T-SQL: Làm cách nào để tạo khóa duy nhất phân biệt chữ hoa chữ thường?

Hiện nay khó khăn của tôi trông như thế này:

alter table MyTable 
add constraint UK_MyTable_MyUniqueKey unique nonclustered (MyCol) 

Khi tôi cố gắng để chèn hai giá trị sau, tôi nhận được một "Vi phạm các hạn chế KEY UNIQUE ..." lỗi.

insert into MyTable (MyCol) values ('ABC') 
insert into MyTable (MyCol) values ('abc') --causes a violation of UNIQUE KEY constraint 'UK_MyTable_MyUnqiueKey' 

Tôi muốn hai giá trị khác nhau được xử lý là không hợp lệ. Tôi tưởng tượng nó sẽ liên quan đến các mã sau đây, nhưng tôi không biết làm thế nào nó thay đổi cú pháp của tôi add constraint.

COLLATE SQL_Latin1_General_CP1_CS_AS 
+0

bạn có nghĩa là trường hợp 'nhạy cảm' hoặc không nhạy cảm? nếu ABC và abc cả hai được giải quyết như nhau thì đó là một trường hợp 'trong so sánh nhạy cảm. Bạn có thể đặt câu hỏi – keithwarren7

+0

có - bạn chính xác. Cảm ơn bạn – Seibar

Trả lời

40

Điều này sẽ thay đổi cột phân biệt chữ hoa chữ thường. Tôi không nghĩ có bất kỳ thay đổi nào đối với ràng buộc của bạn ...

ALTER TABLE mytable 
ALTER COLUMN mycolumn VARCHAR(10) 
COLLATE SQL_Latin1_General_CP1_CS_AS 

Bất kỳ lựa chọn hoặc tham gia nào trên cột này sẽ trở nên nhạy cảm với trường hợp do hoạt động này.

+0

Điều này có khiến tất cả các lựa chọn trên cột đó cũng phân biệt chữ hoa chữ thường không? – Seibar

+7

Mọi thứ liên quan đến cột này sẽ phân biệt chữ hoa chữ thường. –

+4

Bạn sẽ phải bỏ ràng buộc, chạy ALTER, thêm lại PK để đối phó với sự phụ thuộc – gbn

4

Bạn chỉ có thể đặt độ nhạy trường hợp của dữ liệu trong cơ sở dữ liệu (độ chi tiết nhỏ nhất của cột). Bạn không thể đặt trường hợp nhạy cảm của một chỉ mục - đó sẽ là tương đương với việc có thể lập chỉ mục trên một biểu thức, có thể trong một số cơ sở dữ liệu nhưng không phải Sql Server.

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