Je voudrais ajouter quelques détails, car les réponses existantes sont plutôt minces :
L'astuce la plus importante est la suivante: vous ne devriez jamais créer une contrainte sans nom explicite!
Le plus gros problème avec les contraintes sans nom : lorsque vous exécutez cela sur différentes machines client, vous obtiendrez des noms différents / aléatoires sur chacun.
Tout futur script de mise à niveau sera un véritable casse-tête ...
Le conseil général est:
- Pas de contrainte sans nom!
- Utilisez une convention de dénomination, par exemple
DF_TableName_ColumnName
pour une contrainte par défaut
CK_TableName_ColumnName
pour une contrainte de contrôle
UQ_TableName_ColumnName
pour une contrainte unique
PK_TableName
pour une contrainte de clé primaire
La syntaxe générale est
TheColumn <DataType> Nullability CONSTRAINT ConstraintName <ConstraintType> <ConstraintDetails>
Essayez ceci ici
Vous pouvez ajouter plus de contraintes à chaque colonne et vous pouvez ajouter des contraintes supplémentaires tout comme vous ajoutez des colonnes après une virgule:
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
--insérez des données
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);