Làm cách nào để tạo một ràng buộc duy nhất trên cột của tôi (SQL Server 2008 R2)?


108

Tôi có SQL Server 2008 R2 và tôi muốn đặt một cột duy nhất.

Dường như có hai cách để làm điều này: "chỉ mục duy nhất" và "ràng buộc duy nhất". Chúng không khác nhiều so với những gì tôi hiểu, mặc dù ràng buộc duy nhất được hầu hết khuyến nghị, bởi vì bạn cũng nhận được chỉ mục tự động.

Làm cách nào để tạo một ràng buộc duy nhất?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

Có cách nào để tạo một ràng buộc duy nhất thông qua SQL Server Management Studio không?

Câu trả lời:


59

Để tạo các ràng buộc này thông qua GUI, bạn cần hộp thoại "chỉ mục và khóa" chứ không phải hộp thoại ràng buộc kiểm tra.

Nhưng trong trường hợp của bạn, bạn chỉ cần chạy đoạn mã mà bạn đã có. Nó không cần phải được nhập vào cuộc đối thoại biểu thức cả.


Vì vậy, tôi chỉ có thể chạy nó trong một truy vấn? Khi tôi thử, nó chạy thành công, nhưng có nơi nào tôi có thể đến để xem điều đó không (tức là cài đặt đã được thay đổi ở đâu)?
White Island ngày

@WhiteIsland - Bạn sẽ thấy nó trong Trình khám phá đối tượng SSMS nếu bạn mở rộng bảng và xem trong "Phím"
Martin Smith

126

Đặt cột là duy nhất trong SQL Server từ GUI:

Chúng thực sự khiến bạn phải chạy quanh chuồng để làm điều đó với GUI:

Đảm bảo rằng cột của bạn không vi phạm giới hạn duy nhất trước khi bạn bắt đầu.

  1. Mở SQL Server Management Studio.
  2. Nhấp chuột phải vào Bảng của bạn, nhấp vào "Thiết kế".
  3. Nhấp chuột phải vào cột bạn muốn chỉnh sửa, một menu bật lên xuất hiện, nhấp vào Chỉ mục / Khóa.
  4. Nhấp vào nút "Thêm".
  5. Mở rộng tab "Chung".
  6. Đảm bảo rằng bạn đã chọn cột bạn muốn tạo duy nhất trong hộp "cột".
  7. Thay đổi hộp "Loại" thành "Khóa duy nhất".
  8. Nhấp vào "Đóng".
  9. Bạn thấy một dấu sao nhỏ trong cửa sổ tệp, điều này có nghĩa là các thay đổi vẫn chưa được lưu.
  10. Nhấn Lưu hoặc nhấn Ctrl + s. Nó sẽ lưu và cột của bạn phải là duy nhất.

Hoặc đặt cột là duy nhất từ ​​cửa sổ Truy vấn SQL:

alter table location_key drop constraint pinky;
alter table your_table add constraint pinky unique(yourcolumn);

Các thay đổi có hiệu lực ngay lập tức:

Command(s) completed successfully.

Tuyệt quá. Ngoài ra, bạn có thể thêm nhiều cột trong tập lệnh TSQL như sau: bảng thay đổi bảng your_table thêm ràng buộc màu hồng duy nhất (cột của bạn, cột của bạn_2);
Jordan

15

Đây là một cách khác thông qua GUI thực hiện chính xác những gì tập lệnh của bạn thực hiện ngay cả khi nó đi qua Chỉ mục (không phải Ràng buộc) trong trình khám phá đối tượng.

  1. Nhấp chuột phải vào "Chỉ mục" và nhấp vào "Chỉ mục mới ..." (lưu ý: điều này bị tắt nếu bạn mở bảng trong chế độ xem thiết kế)

nhập mô tả hình ảnh ở đây

  1. Đặt tên cho chỉ mục mới ("U_Name"), chọn "Unique" và nhấp vào "Add ..."

nhập mô tả hình ảnh ở đây

  1. Chọn cột "Tên" trong bài viết tiếp theo

nhập mô tả hình ảnh ở đây

  1. Nhấp vào OK trong cả hai cửa sổ

1
Trong SSMS 2014, các tùy chọn menu ngữ cảnh nhấp chuột phải để tạo chỉ mục mới hơi khác so với các ảnh chụp màn hình ở trên. Khi nhấp vào Chỉ mục mới, sau đó bạn phải chọn từ danh sách (Chỉ mục theo cụm, Chỉ mục không được phân cụm, Chỉ mục XML chính, Chỉ mục XML thứ cấp, Chỉ mục không gian, Chỉ mục Columnstore không được phân cụm và Chỉ mục Columnstore theo cụm). Thông thường, bạn sẽ chọn Chỉ mục không phân cụm.
iCode

8

Một điều chưa được đề cập rõ ràng là microsoft sql đang tạo trong nền một chỉ mục duy nhất cho ràng buộc đã thêm

create table Customer ( id int primary key identity (1,1) , name nvarchar(128) ) 

--Commands completed successfully.

sp_help Customer

---> index
--index_name    index_description   index_keys
--PK__Customer__3213E83FCC4A1DFA    clustered, unique, primary key located on PRIMARY   id

---> constraint
--constraint_type   constraint_name delete_action   update_action   status_enabled  status_for_replication  constraint_keys
--PRIMARY KEY (clustered)   PK__Customer__3213E83FCC4A1DFA  (n/a)   (n/a)   (n/a)   (n/a)   id


---- now adding the unique constraint

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

-- Commands completed successfully.

sp_help Customer

---> index
---index_name   index_description   index_keys
---PK__Customer__3213E83FCC4A1DFA   clustered, unique, primary key located on PRIMARY   id
---U_Name   nonclustered, unique, unique key located on PRIMARY name

---> constraint
---constraint_type  constraint_name delete_action   update_action   status_enabled  status_for_replication  constraint_keys
---PRIMARY KEY (clustered)  PK__Customer__3213E83FCC4A1DFA  (n/a)   (n/a)   (n/a)   (n/a)   id
---UNIQUE (non-clustered)   U_Name  (n/a)   (n/a)   (n/a)   (n/a)   name

như bạn có thể thấy, có một ràng buộc mới và một chỉ mục mới U_Name

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.