テーブルの作成中にデフォルトの制約を追加するにはどうすればよいですか?SQL Server [終了]


12

以下に示すように、列の後に制約が続く新しいテーブルを作成しようとしています。

Create tblTest(
columns..
..
..
Gender int,
Constraint DF_tblTest_Gender Default 3 For Gender,
..
..
..
)

ただし、デフォルトの制約に近いエラーメッセージが表示されます。

「for」の近くに不正な構文


CREATE TABLE ...ステートメントについては、Microsoft SQL Serverの公式ドキュメントをご覧ください。非常に基本的な構文エラーがあります。
John aka hot2use

回答:


20

インラインで制約に名前を付けることができます。

CREATE TABLE tblTest(
  --
  --
  Gender int CONSTRAINT DF_tblTest_Gender DEFAULT 3,
  --
) ;

CREATE TABLEMSDNのページショー:

DEFAULT

...以前のバージョンのSQL Serverとの互換性を維持するために、制約名をに割り当てることができますDEFAULT

同じページでは、我々はのための唯一のオプションがあることを見つけることができ<table_constraint>ますPRIMARY KEYFOREIGN 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ステートメントを使用する方法しかありません。


制約に名前を付けたいのですが、インラインで行うとできません。inlineまたはalter tableステートメントを使用しない方法はありますか?
Dhruv Raj

4
@DhruvRaj-この答えが示すように可能です
Martin Smith

8

他の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でオブジェクトエクスプローラーを見ると、名前が示されています。

ここに画像の説明を入力してください


2

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

制約に名前を付けたいのですが、インラインで行うとできません。inlineまたはalter tableステートメントを使用しない方法はありますか?
Dhruv Raj
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.