J'essaie de créer un nouveau tableau avec des colonnes suivies de leur contrainte comme indiqué ci-dessous.
Create tblTest(
columns..
..
..
Gender int,
Constraint DF_tblTest_Gender Default 3 For Gender,
..
..
..
)
Cependant, je reçois un message d'erreur près de la contrainte par défaut,
'Syntaxe incorrecte près de' pour ''
Vous pouvez nommer la contrainte en ligne:
CREATE TABLE tblTest(
--
--
Gender int CONSTRAINT DF_tblTest_Gender DEFAULT 3,
--
) ;
Comme CREATE TABLE
La page msdn affiche:
DEFAULT
... Pour conserver la compatibilité avec les versions antérieures de SQL Server, un nom de contrainte peut être attribué à un
DEFAULT
.
Dans la même page, nous pouvons constater que les seules options pour <table_constraint>
sont PRIMARY KEY
, FOREIGN KEY
et CHECK
contraintes:
< table_constraint > ::= [ CONSTRAINT constraint_name ] { { PRIMARY KEY | UNIQUE } { NONCLUSTERED (column [ ASC | DESC ] [ ,... n ]) | NONCLUSTERED HASH (column [ ,... n ] ) WITH ( BUCKET_COUNT = bucket_count ) } | FOREIGN KEY ( column [ ,...n ] ) REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ] | CHECK ( logical_expression ) }
donc si vous voulez ajouter une contrainte par défaut (nommer ou non) les seules façons sont de le faire en ligne ou avec un ALTER TABLE
déclaration.
Vos commentaires sur les deux autres réponses affirment que vous ne pouvez pas nommer une contrainte par défaut lors de sa création "en ligne". Les deux réponses montrent que vous pouvez, en fait, donner un nom à la contrainte lors de sa création en ligne. J'ajouterai un troisième exemple, montrant les résultats.
IF OBJECT_ID('dbo.Test') IS NOT NULL
DROP TABLE dbo.Test;
CREATE TABLE dbo.Test
(
TestID int NOT NULL
CONSTRAINT PK_Test --here I'm naming the primary key constraint!
PRIMARY KEY CLUSTERED
IDENTITY(1,1)
, SomeData varchar(42) NOT NULL
CONSTRAINT DF_Test_SomeData --this is the name of the default constraint!
DEFAULT ('Carrie Fisher')
);
INSERT INTO dbo.Test DEFAULT VALUES;
Cela montre que le nom de la contrainte par défaut est DF_Test_SomeData
:
SELECT TableName = t.name
, ConstraintName = dc.name
FROM sys.default_constraints dc
INNER JOIN sys.tables t ON dc.parent_object_id = t.object_id;
Résultats:
L'examen de l'explorateur d'objets dans SSMS montre le nom:
Vous pouvez utiliser default value
sur la définition du champ.
Create tblTest(
columns..
..
..
Gender int CONSTRAINT constraint_name DEFAULT 3,
..
..
..
)
Ou utilisez ALTER TABLE:
ALTER TABLE tblTest
ADD CONSTRAINT constraint_name
DEFAULT 3
FOR Gender