ALTER TABLE (SQL Server Compact)

列や制約の変更、追加、または削除によってテーブル定義を修正します。

構文

ALTER TABLE table_name
    ALTER COLUMN column_name 
   {
    type_name[({precision[.scale]})][NULL|NOT NULL]
   {DROP DEFAULT 
   | SET DEFAULT constant_expression 
   | IDENTITY [ ( seed , increment ) ]
   } 
| ADD 
   { < column_definition > | < table_constraint > } [ ,...n ] 
| DROP 
   { [ CONSTRAINT ] constraint_name 
   | COLUMN column }
] }
< column_definition > ::= 
   { column_name data_type } 
   [ [ DEFAULT constant_expression ] 
      | IDENTITY [ ( seed , increment ) ] 
   ] 
   [ROWGUIDCOL]
   [ < column_constraint > ] [ ...n ] ]
< column_constraint > ::= 
   [ NULL | NOT NULL ] 
   [ CONSTRAINT constraint_name ] 
   { 
      | { PRIMARY KEY | UNIQUE } 
      | REFERENCES ref_table [ (ref_column) ] 
      [ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] 
      [ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ]
   }
< table_constraint > ::= 
   [ CONSTRAINT constraint_name ] 
   { [ { PRIMARY KEY | UNIQUE } 
      { ( column [ ,...n ] ) } 
      | FOREIGN KEY 
        ( column [ ,...n ] )
        REFERENCES ref_table [ (ref_column [ ,...n ] ) ] 
      [ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] 
      [ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] 
   }

引数

  • table_name
    変更するテーブルの名前。

    注意

    テーブル名は、識別子のルールに従っている必要があります。table_name は、データベース内で一意である必要があります。table_name には、128 文字まで指定できます。

  • ALTER COLUMN
    特定の列を変更することを指定します。

  • column_name
    テーブルの列名。列名は識別子のルールに従い、テーブル内で一意である必要があります。

  • data_type
    列のデータ型を指定します。データ型の詳細については、「データ型」を参照してください。

  • DEFAULT
    挿入の際に明示的な値を指定しない場合に、列に入力される値を指定します。DEFAULT 定義は、IDENTITY プロパティを定義した列を除くすべての列に適用できます。テーブルが削除されると、DEFAULT 定義も削除されます。既定値として使用できるのは、文字列などの定数値や日付関数だけです。

  • IDENTITY
    新しい列が ID 列であることを示します。テーブルに新しい行が追加されると、MicrosoftSQL Server Compact によって列に増分値が設定されます。ID 列は通常、PRIMARY KEY 制約と組み合わせて使用され、テーブルの一意な行識別子の役割を果たします。IDENTITY プロパティは int 型の列にだけ割り当てることができます。ID 列は、1 つのテーブルにつき、1 つだけ作成できます。バインドされた既定値および DEFAULT 制約を ID 列と組み合わせて使用することはできません。seed と increment の両方を指定するか、どちらも指定しないようにする必要があります。どちらも指定しないときの既定値は (1,1) です。

  • seed
    テーブルに読み込まれる最初の行に使用する値。

  • increment
    既に読み込まれている前の行の ID 値に加算される増分値。

  • ADD
    1 つ以上の列定義またはテーブル制約が追加されるように指定します。

  • DROP { [CONSTRAINT] constraint_name| COLUMN column}
    テーブルから constraint_name または column_name が削除されるように指定します。

  • ROWGUIDCOL
    新しい列が行グローバル一意識別子列であることを示します。1 つのテーブルにつき、1 つの uniqueidentifier 列だけを ROWGUIDCOL 列に指定できます。ROWGUIDCOL プロパティは uniqueidentifier 列にだけ割り当てることができます。

    また、ROWGUIDCOL プロパティは、テーブルに挿入される新しい行の値を自動的に生成します。

  • NULL | NOT NULL
    列に NULL 値を許容するかどうかを指定するキーワード。NULL は厳密には制約ではありませんが、NOT NULL と同じ方法で指定できます。

  • CONSTRAINT
    PRIMARY KEY、UNIQUE または FOREIGN KEY 制約の定義開始を示す省略可能なキーワード。制約は、テーブルとテーブルの列にデータ整合性を適用し、特別な種類のインデックスを作成する特殊なプロパティです。

  • constraint_name
    制約の名前。constraint_name は省略できます。データベース内で一意な名前を指定する必要があります。constraint_name を指定しない場合、制約名は SQL Server Compact によって生成されます。

  • PRIMARY KEY
    一意なインデックスを使用して、特定の列にエンティティの整合性を持たせる制約。PRIMARY KEY 制約は、1 つのテーブルにつき、1 つだけ作成できます。

  • UNIQUE
    一意なインデックスを使用して、特定の 1 つ以上の列にエンティティの整合性を適用する制約。UNIQUE 制約の列には NULL を指定できますが、列ごとに許可される NULL 値は 1 つだけです。1 つのテーブルは複数の UNIQUE 制約を保持できます。

    注意

    SQL Server Compact でインデックスを使用すると、PRIMARY KEY 制約と UNIQUE 制約を適用できます。ただし、この機能に依存したり、制約の一部として作成されたインデックスを変更することはお勧めしません。

  • FOREIGN KEY...REFERENCES
    列内のデータに対して参照整合性を提供する制約。FOREIGN KEY 制約では、列内の各値が、参照テーブル内の指定された列にある必要があります。

  • ref_table
    FOREIGN KEY 制約によって参照されるテーブルの名前。

  • ( ref_column [ ,... n] )
    FOREIGN KEY 制約によって参照されるテーブルの列または列のリスト。

  • ON DELETE {CASCADE | NO ACTION |SET DEFAULT | SET NULL}
    作成されたテーブルの行が参照関係を持ち、参照されている行が親テーブルから削除された場合に、その行に対して実行される操作を指定します。既定値は NO ACTION です。詳細については、後の「解説」セクションを参照してください。

  • ON UPDATE {CASCADE | NO ACTION | SET DEFAULT | SET NULL}
    作成されたテーブルの行が参照関係を持ち、参照されている行が親テーブル内で更新された場合に、その行に対して実行される操作を指定します。既定値は NO ACTION です。詳細については、後の「解説」セクションを参照してください。

  • column
    テーブル制約で使用される、かっこで囲まれた 1 つの列または列リスト。制約定義で使用されている列を示します。

  • n
    先行する項目を n 回繰り返すことを示すプレースホルダ。

説明

ON DELETE または ON UPDATE で CASCADE オプションを指定した場合、対応する参照先の行が親テーブル内で更新されると、参照テーブル内の行が更新されます。NO ACTION を指定した場合には、SQL Server Compact によってエラーが返され、親テーブル内の参照されている行の更新操作がロールバックされます。

たとえば、データベース内に A と B の 2 つのテーブルがあるとします。テーブル A にはテーブル B との参照関係があります。外部キー A.ItemID が、主キー B.ItemID を参照します。

テーブル B の行に対して UPDATE ステートメントが実行されるときに、A.ItemID に ON UPDATE CASCADE アクションが指定されている場合、SQL Server Compact はテーブル A の従属行が 1 つ以上存在するかどうかを調べます。従属行がある場合、テーブル A の従属行が更新され、さらにテーブル B で参照される行も更新されます。

これに対し、NO ACTION が指定されている場合は、テーブル B の行を参照する行がテーブル A に 1 つでもあると、SQL Server Compact はエラーを返し、テーブル B 内で参照されている行の更新操作がロールバックされます。

コード例

A. ID 列の seed 値または increment 値を変更する

次の例では、ID 列の seed 値および increment 値を変更します。

CREATE TABLE MyCustomers (CustID INTEGER IDENTITY (100,1) PRIMARY KEY, CompanyName NvarChar (50));

INSERT INTO MyCustomers (CompanyName) VALUES ('A. Datum Corporation');

ALTER TABLE MyCustomers ALTER COLUMN CustId IDENTITY (200, 2);

B. 列に既定値を追加する

次の例では、CompanyName 列を変更して、既定値を追加します。

ALTER TABLE MyCustomers ALTER COLUMN CompanyName SET DEFAULT 'A. Datum Corporation'

C. 列から既定値を削除する

次の例では、CompanyName 列を変更して、既定値の定義を削除します。

ALTER TABLE MyCustomers ALTER COLUMN CompanyName DROP DEFAULT