column_definition (Transact-SQL)

ALTER TABLE を使ってテーブルに追加される列のプロパティを指定します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

column_name [ type_schema_name. ] type_name
    [ 
                ( { precision [ , scale ] | max | 
            [ { CONTENT | DOCUMENT } ] xml_schema_collection } ) 
    ] 
    [ FILESTREAM ]
    [ 
        [ CONSTRAINT constraint_name ] DEFAULT constant_expression 
             [ WITH VALUES ] 
        | IDENTITY [ (seed , increment ) ] [ NOT FOR REPLICATION ] 
    ] 
    [ ROWGUIDCOL ] 
    [ COLLATE < collation_name > ] 
    [ <column_constraint> [ ...n ] ] 

引数

  • column_name
    変更、追加、または削除する列の名前を指定します。column_name は 1 ~ 128 文字で指定できます。timestamp データ型で作成される新しい列の場合は、column_name を省略できます。timestamp 型の列に対して column_name を指定しない場合には、名前 timestamp が使用されます。

  • [ type_schema_name**.** ] type_name
    追加する列のデータ型と、それが属するスキーマを指定します。

    type_name には次のデータを指定できます。

    • Microsoft SQL Server システム データ型。

    • SQL Server システム データ型に基づく別名データ型。このデータ型をテーブル定義で使用するには、先に CREATE TYPE を使って作成しておく必要があります。

    • Microsoft .NET Framework ユーザー定義型と、それが属するスキーマ。.NET Framework ユーザー定義型をテーブル定義で使用するには、先に CREATE TYPE を使って作成しておく必要があります。

    type_schema_name を指定しない場合、Microsoft データベース エンジンは次の順序で type_name を参照します。

    • SQL Server システム データ型

    • 現在のデータベースにおける現在のユーザーに既定のスキーマ

    • 現在のデータベースの dbo スキーマ

  • precision
    指定したデータ型の有効桁数を指定します。適切な有効桁数の詳細については、「有効桁数、小数点以下桁数、および長さ」を参照してください。

  • scale
    指定したデータ型の小数点以下桁数を指定します。小数点以下桁数値の詳細については、「有効桁数、小数点以下桁数、および長さ (Transact-SQL)」を参照してください。

  • max
    varchar、nvarchar、および varbinary のデータ型のみに適用されます。これらは 2^31 バイトの文字とバイナリ データ、および 2^30 バイトの Unicode データを格納するときに使用されます。

  • CONTENT
    column_name 内の xml データ型の各インスタンスに、複数のトップレベル要素を構成できます。CONTENT は xml データ型にのみ適用され、xml_schema_collection と共に使用する場合にのみ指定できます。指定しない場合は、CONTENT が既定の動作になります。

  • DOCUMENT
    column_name 内の xml データ型の各インスタンスに、トップレベル要素を 1 つだけ構成できます。DOCUMENT は xml データ型にのみ適用され、xml_schema_collection と共に使用する場合にのみ指定できます。

  • xml_schema_collection
    xml データ型にのみ適用されます。XML スキーマ コレクションとこのデータ型を関連付けるためのものです。xml 列をスキーマに入力するには、先に CREATE XML SCHEMA COLLECTION を使ってスキーマをデータベース内に作成する必要があります。

  • FILESTREAM
    オプションで、type_name が varbinary(max) の列に対して FILESTREAM ストレージ属性を指定します。

    列に対して FILESTREAM を指定した場合、ROWGUIDCOL 属性を持つ uniqueidentifier データ型の列がテーブルに存在する必要があります。この列では、null 値は許可されず、UNIQUE または PRIMARY KEY 単一列制約を持つ必要があります。列の GUID 値は、データの挿入時にアプリケーションによって、または NEWID () 関数を使用する DEFAULT 制約によって、提供する必要があります。

    テーブルに FILESTREAM 列が定義されているときは、ROWGUIDCOL 列を削除したり関連する制約を変更したりすることはできません。ROWGUIDCOL 列は、最後の FILESTREAM 列が削除された後でのみ削除できます。

    列に対して FILESTREAM ストレージ属性を指定した場合、この列のすべての値がファイル システム上の FILESTREAM データ コンテナに格納されます。

    列定義の使用方法を示す例については、「FILESTREAM ストレージの概要」を参照してください。

  • [ CONSTRAINT constraint_name ]
    DEFAULT 定義の開始を指定します。以前のバージョンの SQL Server との互換性を維持するために、DEFAULT に制約名を割り当てることができます。constraint_name は、識別子の規則に従う必要があります。ただし、名前の先頭に番号記号 (#) を指定することはできません。constraint_name を指定しない場合、DEFAULT 定義にはシステムによって作成される名前が割り当てられます。

  • DEFAULT
    列の既定値を指定するキーワードです。DEFAULT 定義を使用すると、既存のデータ行に新しい列の値を設定できます。DEFAULT 定義は、timestamp 列または IDENTITY プロパティが指定されている列には適用できません。ユーザー定義型の列に既定値を指定する場合は、その型で constant_expression 型からユーザー定義型への暗黙的な変換がサポートされている必要があります。

  • constant_expression
    リテラル値、NULL 値、または列の既定値として使用されるシステム関数です。.NET Framework ユーザー定義型として定義されている列と共に使用する場合は、その型を実装したときに、constant_expression からユーザー定義型への暗黙的な変換がサポートされる必要があります。

  • WITH VALUES
    DEFAULT constant_expression で指定された値を、既存の行に追加される新しい列に格納します。追加される列で NULL 値が許容される場合、WITH VALUES を指定すると、既存の行に追加される新しい列には既定値が格納されます。NULL 値が許容される列に対して WITH VALUES を指定しない場合は、既存の行の新しい列には NULL 値が格納されます。新しい列で NULL 値が許容されない場合は、WITH VALUES の指定に関係なく、新しい行に既定値が格納されます。

  • IDENTITY
    新しい列が ID 列であることを指定します。SQL Server データベース エンジンは、列に一意な増分値を設定します。既存のテーブルに ID 列を追加すると、テーブルの既存の行にシード値と増分値を持つ識別番号が追加されます。行の更新順序は保証されません。識別番号は、新しく追加された行に対しても生成されます。

    ID 列は通常、PRIMARY KEY 制約と組み合わせて使用し、テーブルの一意な行識別子の役割を果たします。IDENTITY プロパティは、tinyint、smallint、int、bigint、decimal(p,0)、または numeric(p,0) 型の列に割り当てることができます。ID 列は 1 つのテーブルにつき 1 つだけ作成できます。DEFAULT キーワードとバインドされている既定値は、ID 列で使用できません。seed と increment は両方指定するか、どちらも指定しないでください。どちらも指定しない場合、既定値は (1,1) になります。既存のテーブル列を変更して IDENTITY プロパティを追加することはできません。

    注意

    パブリッシュされたテーブルへの ID 列の追加はサポートされていません。これは、列をサブスクライバにレプリケートするときに集約できなくなる可能性があるためです。パブリッシャ側での ID 列の値は、影響を受けるテーブルの行が物理的に格納される順序に依存します。サブスクライバ側では行は別の方法で格納される場合があるため、ID 列の値は同じ行で異なる可能性があります。

    値の明示的な挿入を許可して列の IDENTITY プロパティを無効にするには、SET IDENTITY_INSERT を使用します。

  • seed
    テーブルに読み込まれる先頭行で使用される値を指定します。

  • increment
    読み込まれている前の行の ID 値に加算される増分値を指定します。

  • NOT FOR REPLICATION
    IDENTITY プロパティに対して指定できます。IDENTITY プロパティに対してこの句を指定した場合、レプリケーション エージェントが挿入操作を実行するとき ID 列の値は増加しません。詳細については、「NOT FOR REPLICATION を使用した制約、ID、およびトリガの制御」を参照してください。

  • ROWGUIDCOL
    列が、行グローバル一意識別子列であることを指定します。ROWGUIDCOL は、uniqueidentifier 列にのみ割り当てることができ、1 つのテーブルに 1 つの uniqueidentifier 列だけを ROWGUIDCOL 列として指定できます。ROWGUIDCOL は、ユーザー定義データ型の列には割り当てできません。

    ROWGUIDCOL では、列に格納される値の一意性は設定されません。また、テーブルに新しい行を挿入しても値は自動的に生成されません。各列に一意な値を生成するには、INSERT ステートメントで NEWID 関数を使用するか、列の既定値として NEWID 関数を指定します。詳細については、「NEWID (Transact-SQL)」および「INSERT (Transact-SQL)」を参照してください。

  • COLLATE < collation_name>
    列の照合順序を指定します。照合順序を指定しない場合は、データベースの既定の照合順序が列に割り当てられます。照合順序名には、Windows 照合順序名または SQL 照合順序名を指定できます。照合順序名の一覧と詳細については、「Windows 照合順序名 (Transact-SQL)」および「SQL Server 照合順序名 (Transact-SQL)」を参照してください。

    COLLATE 句は、char、varchar、nchar、および nvarchar データ型の列の照合順序のみを指定する場合に使用できます。

    COLLATE 句の詳細については、「COLLATE (Transact-SQL)」を参照してください。

説明

追加される列が uniqueidentifier 型の場合は、NEWID() 関数を使用する既定値を定義することで、テーブル内にある既存の各行の新しい列に一意な ID 値を設定できます。

データベース エンジンでは、列定義において DEFAULT、IDENTITY、ROWGUIDCOL または列制約を指定する場合に順序は適用されません。

例については、「ALTER TABLE (Transact-SQL)」を参照してください。