Tôi muốn thêm một số chi tiết, vì các câu trả lời hiện có khá mỏng :
Gợi ý quan trọng nhất là: Bạn không bao giờ nên tạo ra một ràng buộc mà không có tên rõ ràng!
Vấn đề lớn nhất với các ràng buộc không tên : Khi bạn thực hiện điều này trên các máy khách hàng khác nhau, bạn sẽ nhận được các tên khác nhau / ngẫu nhiên trên mỗi máy.
Bất kỳ kịch bản nâng cấp trong tương lai sẽ là một vấn đề đau đầu thực sự ...
Lời khuyên chung là:
- Không ràng buộc mà không có tên!
- Sử dụng một số quy ước đặt tên, vd
DF_TableName_ColumnName
cho một ràng buộc mặc định
CK_TableName_ColumnName
cho một ràng buộc kiểm tra
UQ_TableName_ColumnName
cho một ràng buộc duy nhất
PK_TableName
cho một ràng buộc khóa chính
Cú pháp chung là
TheColumn <DataType> Nullability CONSTRAINT ConstraintName <ConstraintType> <ConstraintDetails>
Hãy thử nó ở đây
Bạn có thể thêm nhiều ràng buộc hơn cho mỗi cột và bạn có thể thêm các ràng buộc bổ sung giống như bạn thêm các cột sau dấu phẩy:
CREATE TABLE dbo.SomeOtherTable(TheIdThere INT NOT NULL CONSTRAINT PK_SomeOtherTable PRIMARY KEY)
GO
CREATE TABLE dbo.TestTable
(
--define the primary key
ID INT IDENTITY NOT NULL CONSTRAINT PK_TestTable PRIMARY KEY
--let the string be unique (results in a unique index implicitly)
,SomeUniqueString VARCHAR(100) NOT NULL CONSTRAINT UQ_TestTable_SomeUniqueString UNIQUE
--define two constraints, one for a default value and one for a value check
,SomeNumber INT NULL CONSTRAINT DF_TestTable_SomeNumber DEFAULT (0)
CONSTRAINT CK_TestTable_SomeNumber_gt100 CHECK(SomeNumber>100)
--add a foreign key constraint
,SomeFK INT NOT NULL CONSTRAINT FK_TestTable_SomeFK FOREIGN KEY REFERENCES dbo.SomeOtherTable(TheIdThere)
--add a constraint for two columns separately
,CONSTRAINT UQ_TestTable_StringAndNumber UNIQUE(SomeFK,SomeNumber)
);
GO
- xác nhận một số dữ liệu
INSERT INTO dbo.SomeOtherTable VALUES(1);
INSERT INTO dbo.TestTable(SomeUniqueString,SomeNumber,SomeFK) VALUES('hello',111,1);
GO
INSERT INTO dbo.TestTable(SomeUniqueString,SomeNumber,SomeFK)
VALUES('fails due to uniqueness of 111,1',111,1);