以下に示すように、列の後に制約が続く新しいテーブルを作成しようとしています。
Create tblTest(
columns..
..
..
Gender int,
Constraint DF_tblTest_Gender Default 3 For Gender,
..
..
..
)
ただし、デフォルトの制約に近いエラーメッセージが表示されます。
「forの近くに不正な構文」
インラインで制約に名前を付けることができます。
CREATE TABLE tblTest(
--
--
Gender int CONSTRAINT DF_tblTest_Gender DEFAULT 3,
--
) ;
CREATE TABLE
msdnページが示すように:
DEFAULT
... SQL Serverの以前のバージョンとの互換性を維持するために、
DEFAULT
に制約名を割り当てることができます。
同じページで、<table_constraint>
のオプションはPRIMARY KEY
、FOREIGN KEY
およびCHECK
制約のみであることがわかります。
< 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 ) }
したがって、デフォルトの制約を(名前付けの有無にかかわらず)追加したい場合は、インラインまたはALTER TABLE
ステートメントを使用する方法しかありません。
他の2つの回答に対するコメントでは、デフォルトの制約を「インライン」で作成するときに名前を付けることはできません。どちらの回答も、インラインで作成するときに実際に制約の名前を指定できることを示しています。結果を示す3番目の例を追加します。
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;
これは、デフォルトの制約の名前が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;
結果:
SSMSでオブジェクトエクスプローラーを見ると、名前が示されています。
フィールド定義でdefault value
を使用できます。
Create tblTest(
columns..
..
..
Gender int CONSTRAINT constraint_name DEFAULT 3,
..
..
..
)
または、ALTER TABLEを使用します。
ALTER TABLE tblTest
ADD CONSTRAINT constraint_name
DEFAULT 3
FOR Gender