मैं कुछ विवरण जोड़ना चाहूंगा, क्योंकि मौजूदा उत्तर बल्कि पतले हैं :
सबसे महत्वपूर्ण संकेत है: आपको कभी भी एक स्पष्ट नाम के बिना एक बाधा नहीं बनानी चाहिए!
अनाम बाधाओं के साथ सबसे बड़ी समस्या : जब आप इसे विभिन्न ग्राहक मशीनों पर निष्पादित करते हैं, तो आपको प्रत्येक पर अलग / यादृच्छिक नाम मिलेंगे ।
कोई भी भविष्य की अपग्रेड स्क्रिप्ट एक वास्तविक सिरदर्द होगी ...
सामान्य सलाह है:
- बिना नाम की कोई अड़चन!
- कुछ नामकरण सम्मेलन का उपयोग करें
DF_TableName_ColumnName
एक डिफ़ॉल्ट बाधा के लिए
CK_TableName_ColumnName
एक चेक बाधा के लिए
UQ_TableName_ColumnName
एक अद्वितीय बाधा के लिए
PK_TableName
एक प्राथमिक कुंजी बाधा के लिए
सामान्य वाक्यविन्यास है
TheColumn <DataType> Nullability CONSTRAINT ConstraintName <ConstraintType> <ConstraintDetails>
यहाँ यह कोशिश करो
आप प्रत्येक कॉलम में और अधिक बाधाएँ जोड़ सकते हैं और अल्पविराम के बाद कॉलम जोड़ते ही आप अतिरिक्त बाधाएँ जोड़ सकते हैं:
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
- कुछ डेटा को सम्मिलित करें
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);