Các ràng buộc duy nhất trên các cột không thể xóa trong SQL Server 2005


12

Trong dự án này tôi đang thực hiện, tôi cần đặt một trường cụ thể là duy nhất (không phải là vấn đề!) Nhưng nếu trường đó là null tôi muốn bỏ qua các ràng buộc. Trong Sql Server 2008 tôi sử dụng chỉ mục được lọc như hiển thị bên dưới nhưng điều này không có sẵn trong các phiên bản trước của SQL!

CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC
ON [User] (pinNr)
WHERE UserName IS NOT NULL

Nhưng tôi không nghĩ rằng điều này có sẵn trong SQL Server 2005. Trên thực tế, bài đăng trên blog này cho thấy có một cách giải quyết bằng cách sử dụng trình kích hoạt để kiểm tra tính duy nhất. Có ai có một ví dụ về điều này? hoặc có thể là một sự thay thế?

Thật không may, việc nâng cấp lên SQl Server 2008 không phải là một tùy chọn cho khách hàng cụ thể này !!

Câu trả lời:


18

Thật ra, tôi đã phải làm một cái gì đó như thế này một lần. Nó liên quan đến việc tạo một cột được tính toán lấy giá trị của cột Unique khi không NULLvà giá trị của khóa chính (với một số logic khác để không thể xung đột với các giá trị trên cột duy nhất) và tạo chỉ mục duy nhất trên cột đó. Bạn có thể xem một ví dụ về điều này và phương thức kích hoạt ở đây .


7

Bạn có thể tạo chế độ xem (Trường hợp Tên người dùng không phải là null) sau đó đặt một chỉ mục duy nhất so với chế độ xem. Bạn sẽ không bao giờ cần sử dụng chế độ xem, nó sẽ chỉ tồn tại cho điều này.

Bạn cũng có thể sử dụng kỹ thuật này để thực thi tính duy nhất trên một số bảng, trong đó thông thường là không thể.


2
Lượt xem được lập chỉ mục không yêu cầu phiên bản doanh nghiệp. Tuy nhiên, họ yêu cầu bạn sử dụng gợi ý truy vấn VỚI (NOEXPAND) để buộc trình tối ưu hóa truy vấn phiên bản tiêu chuẩn sử dụng chế độ xem được lập chỉ mục thay vì truy vấn bên dưới.
Jeremiah Peschka

3
Trong trường hợp này mặc dù quan điểm duy nhất là thực thi các ràng buộc duy nhất và đây là một cách tiếp cận hoàn toàn hợp lệ / phổ biến.
Martin Smith

2
Đã chỉnh sửa để xóa thông tin không chính xác về Phiên bản doanh nghiệp được yêu cầu.
Meff

@Meff cảm ơn vì đã dành thời gian trả lời các bình luận ở đây - Tôi hy vọng bạn sẽ không phải là người xa lạ với trang web: bạn có thể quan tâm đến những câu hỏi này :)
Jack nói hãy thử topanswers.xyz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.