SQL Server 2005 Làm thế nào để tạo một ràng buộc duy nhất?


181

Làm cách nào để tạo một ràng buộc duy nhất trên một bảng hiện có trong SQL Server 2005?

Tôi đang tìm kiếm cả TSQL và cách thực hiện trong Sơ đồ cơ sở dữ liệu.

Câu trả lời:


272

Lệnh SQL là:

ALTER TABLE <tablename> ADD CONSTRAINT
            <constraintname> UNIQUE NONCLUSTERED
    (
                <columnname>
    )

Xem cú pháp đầy đủ ở đây .

Nếu bạn muốn làm điều đó từ Sơ đồ cơ sở dữ liệu:

  • nhấp chuột phải vào bảng và chọn 'Chỉ mục / Phím'
  • nhấp vào nút Thêm để thêm chỉ mục mới
  • nhập thông tin cần thiết vào Thuộc tính ở phía bên phải:
    • các cột bạn muốn (nhấp vào nút dấu chấm lửng để chọn)
    • thiết lập là duy nhất thành có
    • đặt cho nó một cái tên thích hợp

1
Nó hoạt động ... nhưng ... tại sao ràng buộc được hiển thị trong thư mục INDEX thay vì thư mục CONSTRAINTS. Nó được hiển thị với một biểu tượng khác, nhưng dù sao nó cũng phải ở thư mục ràng buộc.
Fernando Torres

84

Trong SQL Server Management Studio Express:

  • Nhấp chuột phải vào bảng, chọn Sửa đổi hoặc Thiết kế (Dành cho các Phiên bản mới hơn)
  • Bấm chuột phải vào trường, chọn Chỉ mục / Khóa ...
  • Nhấp vào Thêm
  • Đối với Cột , chọn tên trường bạn muốn là duy nhất.
  • Đối với Loại , chọn Khóa duy nhất .
  • Bấm Đóng , Lưu bảng.

29
ALTER TABLE [TableName] ADD CONSTRAINT  [constraintName] UNIQUE ([columns])

15

Cảnh báo: Chỉ một hàng null có thể nằm trong cột bạn đặt là duy nhất.

Bạn có thể làm điều này với một chỉ mục được lọc trong SQL 2008:

CREATE UNIQUE NONCLUSTERED INDEX idx_col1
ON dbo.MyTable(col1)
WHERE col1 IS NOT NULL;

Xem giá trị trường phải là duy nhất trừ khi đó là NULL cho một loạt các câu trả lời.


Làm thế nào để bạn làm điều này trong máy chủ sql 2005?
Maxrunner

2
Không thể đạt được trong máy chủ sql 2005. Tôi thực sự khuyên bạn nên nâng cấp lên RDBMS cập nhật hơn - nó sẽ chính thức không được hỗ trợ kể từ ngày 12 tháng 4 năm 2016.
reedstonefood

13
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
            <namingconventionconstraint> UNIQUE NONCLUSTERED
    (
                <columnname>
    ) ON [PRIMARY]

10

Tôi cũng thấy bạn có thể làm điều này thông qua, sơ đồ cơ sở dữ liệu.

Bằng cách nhấp chuột phải vào bảng và chọn Chỉ mục / Khóa ...

Nhấp vào nút 'Thêm' và thay đổi các cột thành (các) cột bạn muốn tạo sự độc đáo.

Thay đổi là duy nhất thành Có.

Nhấp vào đóng và lưu sơ đồ, và nó sẽ thêm nó vào bảng.


8

Bạn đang tìm kiếm một cái gì đó như sau

ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
UNIQUE column_b

Tài liệu MSDN


6

Để tạo một ràng buộc ĐỘC ĐÁO trên một hoặc nhiều cột khi bảng đã được tạo, hãy sử dụng SQL sau:

ALTER TABLE TableName ADd UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)

Để cho phép đặt tên của một ràng buộc ĐỘC ĐÁO cho truy vấn trên

ALTER TABLE TableName ADD CONSTRAINT un_constaint_name UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)

Truy vấn được hỗ trợ bởi Truy cập MySQL / SQL Server / Oracle / MS.


UNIQUE NONCLUSTEREDlựa chọn PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ?
Kiquenet

5

Trong sơ đồ phòng quản lý chọn bảng, nhấp chuột phải để thêm cột mới nếu muốn, nhấp chuột phải vào cột và chọn "Kiểm tra ràng buộc", ở đó bạn có thể thêm một cột.


0

Trong một số trường hợp, có thể mong muốn đảm bảo Khóa duy nhất không tồn tại trước khi tạo. Trong những trường hợp như vậy, đoạn script dưới đây có thể giúp:

IF Exists(SELECT * FROM sys.indexes WHERE name Like '<index_name>')
    ALTER TABLE dbo.<target_table_name> DROP CONSTRAINT <index_name> 
GO

ALTER TABLE dbo.<target_table_name> ADD CONSTRAINT <index_name> UNIQUE NONCLUSTERED (<col_1>, <col_2>, ..., <col_n>) 
GO
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.