CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)

適用対象: ○SQL Server (2008 以降) ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

SQL ServerSQL ServerAzure SQL データベースAzure SQL Database で新しいテーブルを作成します。Creates a new table in SQL ServerSQL Server and Azure SQL データベースAzure SQL Database.

注意

SQL データ ウェアハウスSQL Data Warehouse 構文については、「CREATE TABLE (Azure SQL Data Warehouse)」をご覧ください。For SQL データ ウェアハウスSQL Data Warehouse syntax, see CREATE TABLE (Azure SQL Data Warehouse).

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

簡単な構文Simple Syntax

--Simple CREATE TABLE Syntax (common if not using options)
CREATE TABLE
    { database_name.schema_name.table_name. | schema_name.table_name | table_name }
    ( { <column_definition> } [ ,...n ] )
[ ; ]

完全な構文Full Syntax

--Disk-Based CREATE TABLE Syntax
CREATE TABLE
    { database_name.schema_name.table_name | schema_name.table_name | table_name }
    [ AS FileTable ]
    ( {   <column_definition>
        | <computed_column_definition>
        | <column_set_definition>
        | [ <table_constraint> ] [ ,... n ]
        | [ <table_index> ] }
          [ ,...n ]
          [ PERIOD FOR SYSTEM_TIME ( system_start_time_column_name
             , system_end_time_column_name ) ]
      )
    [ ON { partition_scheme_name ( partition_column_name )
           | filegroup
           | "default" } ]
    [ TEXTIMAGE_ON { filegroup | "default" } ]
    [ FILESTREAM_ON { partition_scheme_name
           | filegroup
           | "default" } ]
    [ WITH ( <table_option> [ ,...n ] ) ]
[ ; ]
  
<column_definition> ::=
column_name <data_type>
    [ FILESTREAM ]
    [ COLLATE collation_name ]
    [ SPARSE ]
    [ MASKED WITH ( FUNCTION = ' mask_function ') ]
    [ CONSTRAINT constraint_name [ DEFAULT constant_expression ] ]
    [ IDENTITY [ ( seed,increment ) ]
    [ NOT FOR REPLICATION ]
    [ GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] ]
    [ NULL | NOT NULL ]
    [ ROWGUIDCOL ]
    [ ENCRYPTED WITH
        ( COLUMN_ENCRYPTION_KEY = key_name ,
          ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED } ,
          ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
        ) ]
    [ <column_constraint> [, ...n ] ]
    [ <column_index> ]
  
<data type> ::=
[ type_schema_name . ] type_name
    [ ( precision [ , scale ] | max |
        [ { CONTENT | DOCUMENT } ] xml_schema_collection ) ]
  
<column_constraint> ::=
[ CONSTRAINT constraint_name ]
{     { PRIMARY KEY | UNIQUE }
        [ CLUSTERED | NONCLUSTERED ]
        [
            WITH FILLFACTOR = fillfactor
          | WITH ( < index_option > [ , ...n ] )
        ]
        [ ON { partition_scheme_name ( partition_column_name )
            | filegroup | "default" } ]
  
  | [ FOREIGN KEY ]
        REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
        [ NOT FOR REPLICATION ]
  
  | CHECK [ NOT FOR REPLICATION ] ( logical_expression )
}
  
<column_index> ::=
 INDEX index_name [ CLUSTERED | NONCLUSTERED ]
    [ WITH ( <index_option> [ ,... n ] ) ]
    [ ON { partition_scheme_name (column_name )
         | filegroup_name
         | default
         }
    ]
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
  
<computed_column_definition> ::=
column_name AS computed_column_expression
[ PERSISTED [ NOT NULL ] ]
[
    [ CONSTRAINT constraint_name ]
    { PRIMARY KEY | UNIQUE }
        [ CLUSTERED | NONCLUSTERED ]
        [
            WITH FILLFACTOR = fillfactor
          | WITH ( <index_option> [ , ...n ] )
        ]
        [ ON { partition_scheme_name ( partition_column_name )
        | filegroup | "default" } ]
  
    | [ FOREIGN KEY ]
        REFERENCES referenced_table_name [ ( ref_column ) ]
        [ ON DELETE { NO ACTION | CASCADE } ]
        [ ON UPDATE { NO ACTION } ]
        [ NOT FOR REPLICATION ]
  
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )
]
  
<column_set_definition> ::=
column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
  
< table_constraint > ::=
[ CONSTRAINT constraint_name ]
{
    { PRIMARY KEY | UNIQUE }
        [ CLUSTERED | NONCLUSTERED ]
        (column [ ASC | DESC ] [ ,...n ] )
        [
            WITH FILLFACTOR = fillfactor
           |WITH ( <index_option> [ , ...n ] )
        ]
        [ ON { partition_scheme_name (partition_column_name)
            | filegroup | "default" } ]
    | FOREIGN KEY
        ( column [ ,...n ] )
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
        [ NOT FOR REPLICATION ]
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )

< table_index > ::=
{  
    {  
      INDEX index_name [ CLUSTERED | NONCLUSTERED ]
         (column_name [ ASC | DESC ] [ ,... n ] )
    | INDEX index_name CLUSTERED COLUMNSTORE
    | INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )
    }
    [ WITH ( <index_option> [ ,... n ] ) ]
    [ ON { partition_scheme_name (column_name )
         | filegroup_name
         | default
         }
    ]
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
  
}

<table_option> ::=
{  
    [DATA_COMPRESSION = { NONE | ROW | PAGE }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }
      [ , ...n ] ) ]]
    [ FILETABLE_DIRECTORY = <directory_name> ]
    [ FILETABLE_COLLATE_FILENAME = { <collation_name> | database_default } ]
    [ FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = <constraint_name> ]
    [ FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = <constraint_name> ]
    [ FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = <constraint_name> ]
    [ SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name . history_table_name
        [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ] ]
    [ REMOTE_DATA_ARCHIVE =
      {
          ON [ ( <table_stretch_options> [,...n] ) ]
        | OFF ( MIGRATION_STATE = PAUSED )
      }
    ]
}
  
<table_stretch_options> ::=
{  
    [ FILTER_PREDICATE = { null | table_predicate_function } , ]
      MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }
 }
  
<index_option> ::=
{
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
  | STATISTICS_INCREMENTAL = { ON | OFF }
  | ALLOW_ROW_LOCKS = { ON | OFF}
  | ALLOW_PAGE_LOCKS ={ ON | OFF}
  | COMPRESSION_DELAY= {0 | delay [Minutes]}
  | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
       [ ON PARTITIONS ( { <partition_number_expression> | <range> }
       [ , ...n ] ) ]
}
<range> ::=
<partition_number_expression> TO <partition_number_expression>
--Memory optimized CREATE TABLE Syntax
CREATE TABLE
    { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( { <column_definition>
    | [ <table_constraint> ] [ ,... n ]
    | [ <table_index> ]
      [ ,... n ] }
      [ PERIOD FOR SYSTEM_TIME ( system_start_time_column_name
        , system_end_time_column_name ) ]
)
    [ WITH ( <table_option> [ ,... n ] ) ]
 [ ; ]

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] ]
    [ NULL | NOT NULL ]
[
    [ CONSTRAINT constraint_name ] DEFAULT memory_optimized_constant_expression ]
    | [ IDENTITY [ ( 1, 1 ) ]
]
    [ <column_constraint> ]
    [ <column_index> ]
  
<data type> ::=
 [type_schema_name . ] type_name [ (precision [ , scale ]) ]

<column_constraint> ::=
 [ CONSTRAINT constraint_name ]
{
  { PRIMARY KEY | UNIQUE }
      {   NONCLUSTERED
        | NONCLUSTERED HASH WITH (BUCKET_COUNT = bucket_count)
      }
  | [ FOREIGN KEY ]
        REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]
  | CHECK ( logical_expression )
}
  
< 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 )
}

<column_index> ::=
  INDEX index_name
{ [ NONCLUSTERED ] | [ NONCLUSTERED ] HASH WITH (BUCKET_COUNT = bucket_count)}

<table_index> ::=
  INDEX index_name
{   [ NONCLUSTERED ] HASH (column [ ,... n ] ) WITH (BUCKET_COUNT = bucket_count)
  | [ NONCLUSTERED ] (column [ ASC | DESC ] [ ,... n ] )
      [ ON filegroup_name | default ]
  | CLUSTERED COLUMNSTORE [WITH ( COMPRESSION_DELAY = {0 | delay [Minutes]})]
      [ ON filegroup_name | default ]
  
}
  
<table_option> ::=
{  
    MEMORY_OPTIMIZED = ON
  | DURABILITY = {SCHEMA_ONLY | SCHEMA_AND_DATA}
  | SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name . history_table_name
        [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]
  
}

引数Arguments

database_name database_name
テーブルが作成されたデータベースの名前を指定します。Is the name of the database in which the table is created. database_name には、既存のデータベース名を指定する必要があります。database_name must specify the name of an existing database. 指定しない場合、database_name は現在のデータベースに設定されます。If not specified, database_name defaults to the current database. 現在の接続に対するログインには、database_name で指定されたデータベース内の既存のユーザー ID を関連付け、そのユーザー ID に CREATE TABLE 権限を許可しておく必要があります。The login for the current connection must be associated with an existing user ID in the database specified by database_name, and that user ID must have CREATE TABLE permissions.

schema_name schema_name
新しいテーブルが所属するスキーマの名前です。Is the name of the schema to which the new table belongs.

table_name table_name
新しいテーブルの名前です。Is the name of the new table. テーブル名は識別子の規則に従っている必要があります。Table names must follow the rules for identifiers. 116 文字までしか使用できないローカル一時テーブル名 (名前の先頭に 1 つの番号記号 (#) が付加されます) を除き、table_name には、最大 128 文字を使用できます。table_name can be a maximum of 128 characters, except for local temporary table names (names prefixed with a single number sign (#)) that cannot exceed 116 characters.

AS FileTableAS FileTable
適用対象: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) から SQL Server 2017SQL Server 2017 まで)。Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017).

新しいテーブルを FileTable として作成します。Creates the new table as a FileTable. FileTable には固定スキーマがあるため、列は指定しません。You do not specify columns because a FileTable has a fixed schema. 詳細については、「FileTables」を参照してください。For more information, see FileTables.

column_name column_name
computed_column_expression computed_column_expression
計算列の値を定義する式です。Is an expression that defines the value of a computed column. 計算列は、PERSISTED とマークされていない限り、テーブルに物理的に保存されない仮想列です。A computed column is a virtual column that is not physically stored in the table, unless the column is marked PERSISTED. この列は、同じテーブルの他の列を使用する式から計算されます。The column is computed from an expression that uses other columns in the same table. たとえば、計算列は cost AS price * qty として定義されます。式には、非計算列の名前、定数、関数、変数、および 1 つ以上の演算子によってこれらを結合した組み合わせを使用できます。For example, a computed column can have the definition: cost AS price * qty. The expression can be a noncomputed column name, constant, function, variable, and any combination of these connected by one or more operators. 式をサブクエリにすることはできません。また、別名データ型を含めることはできません。The expression cannot be a subquery or contain alias data types.

計算列は、選択リスト、WHERE 句、ORDER BY 句、その他標準式が使用できる任意の位置で使用できます。ただし、次の場合は除きます。Computed columns can be used in select lists, WHERE clauses, ORDER BY clauses, or any other locations in which regular expressions can be used, with the following exceptions:

  • FOREIGN KEY 制約または CHECK 制約で使用される計算列は、PERSISTED に設定する必要があります。Computed columns must be marked PERSISTED to participate in a FOREIGN KEY or CHECK constraint.

  • 計算列の値が決定的な式によって定義され、その結果のデータ型がインデックス列で許可される場合、計算列は、インデックスのキー列として、または任意の PRIMARY KEY 制約や UNIQUE 制約の一部として使用できます。A computed column can be used as a key column in an index or as part of any PRIMARY KEY or UNIQUE constraint, if the computed column value is defined by a deterministic expression and the data type of the result is allowed in index columns.

    たとえば、テーブルに整数型の列 ab がある場合、計算列 a+b にはインデックスを作成できますが、計算列 a+DATEPART(dd, GETDATE()) にインデックスを作成することはできません。これは、この計算列の値が次の呼び出しで変更される可能性があるためです。For example, if the table has integer columns a and b, the computed column a+b may be indexed, but computed column a+DATEPART(dd, GETDATE()) cannot be indexed because the value may change in subsequent invocations.

  • 計算列を INSERT ステートメントまたは UPDATE ステートメントの対象にすることはできません。A computed column cannot be the target of an INSERT or UPDATE statement.

注意

テーブル内の各行は、計算列に関係する列に対して異なる値を持つ場合があります。そのため、計算列が各行について同じ値を持たない場合があります。Each row in a table can have different values for columns that are involved in a computed column; therefore, the computed column may not have the same value for each row.

計算列で NULL 値を許容するかどうかは、使用されている式に基づいてデータベース エンジンDatabase Engineによって自動的に決定されます。Based on the expressions that are used, the nullability of computed columns is determined automatically by the データベース エンジンDatabase Engine. null 値を許容しない列しかない場合でも、ほとんどの式の結果は null 値を許容すると見なされます。これは、アンダーフローやオーバーフローによって結果が null 値になる場合があるためです。The result of most expressions is considered nullable even if only nonnullable columns are present, because possible underflows or overflows also produce NULL results. テーブルの任意の計算列で NULL 値が許容されるかどうかを調べるには、COLUMNPROPERTY 関数で AllowsNull プロパティを使用します。Use the COLUMNPROPERTY function with the AllowsNull property to investigate the nullability of any computed column in a table. NULL 値が許容される式を、NULL 値を許容しない式に変換するには、ISNULLcheck_expression 定数を指定します。この定数は、NULL 値の結果の代わりに使用される NULL 以外の値です。An expression that is nullable can be turned into a nonnullable one by specifying ISNULL with the check_expression constant, where the constant is a nonnull value substituted for any NULL result. 共通言語ランタイム (CLR) のユーザー定義型の式に基づく計算列では、その型に対する REFERENCES 権限が必要です。REFERENCES permission on the type is required for computed columns based on common language runtime (CLR) user-defined type expressions.

PERSISTEDPERSISTED
SQL Server データベース エンジンSQL Server Database Engineで、計算値をテーブルに物理的に保存し、依存する計算列のいずれかが更新された場合にその値を更新するように指定します。Specifies that the SQL Server データベース エンジンSQL Server Database Engine will physically store the computed values in the table, and update the values when any other columns on which the computed column depends are updated. 計算列を PERSISTED とマークすることで、計算列に対して決定論的なインデックスを作成することができますが、正確ではありません。Marking a computed column as PERSISTED lets you create an index on a computed column that is deterministic, but not precise. 詳細については、「 計算列のインデックス」を参照してください。For more information, see Indexes on Computed Columns. パーティション テーブルのパーティション分割列として使用される計算列は、明示的に PERSISTED に設定する必要があります。Any computed columns that are used as partitioning columns of a partitioned table must be explicitly marked PERSISTED. PERSISTED が指定されている場合、computed_column_expression は決定論的である必要があります。computed_column_expression must be deterministic when PERSISTED is specified.

ON { partition_scheme | filegroup | "default" }ON { partition_scheme | filegroup | "default" }
テーブルが格納されるパーティション構成またはファイル グループを指定します。Specifies the partition scheme or filegroup on which the table is stored. partition_scheme を指定すると、テーブルはパーティション テーブルとなり、各パーティションは partition_scheme で指定した 1 つ以上のファイル グループに格納されます。If partition_scheme is specified, the table is to be a partitioned table whose partitions are stored on a set of one or more filegroups specified in partition_scheme. filegroup を指定すると、テーブルは指定されたファイル グループに格納されます。If filegroup is specified, the table is stored in the named filegroup. ファイル グループがデータベース内に存在している必要があります。The filegroup must exist within the database. "default" を指定するか、ON をまったく指定しないと、テーブルは既定のファイル グループに格納されます。If "default" is specified, or if ON is not specified at all, the table is stored on the default filegroup. CREATE TABLE で指定したテーブルの格納方法を後から変更することはできません。The storage mechanism of a table as specified in CREATE TABLE cannot be subsequently altered.

ON {partition_scheme | filegroup | "default" } は、PRIMARY KEY 制約または UNIQUE 制約で指定することもできます。ON {partition_scheme | filegroup | "default"} can also be specified in a PRIMARY KEY or UNIQUE constraint. これらの制約はインデックスを作成します。These constraints create indexes. filegroup を指定すると、インデックスは指定されたファイル グループに格納されます。If filegroup is specified, the index is stored in the named filegroup. "default" を指定するか、ON を指定しなかった場合、インデックスはテーブルと同じファイル グループに格納されます。If "default" is specified, or if ON is not specified at all, the index is stored in the same filegroup as the table. PRIMARY KEY または UNIQUE 制約によりクラスター化インデックスが作成される場合、テーブルのデータ ページはインデックスと同じファイル グループに格納されます。If the PRIMARY KEY or UNIQUE constraint creates a clustered index, the data pages for the table are stored in the same filegroup as the index. CLUSTERED を指定するか、制約によりクラスター化インデックスを作成し、テーブル定義の partition_scheme または filegroup とは異なる partition_scheme (またはその逆) を指定すると、制約定義だけが優先され、それ以外は無視されます。If CLUSTERED is specified or the constraint otherwise creates a clustered index, and a partition_scheme is specified that differs from the partition_scheme or filegroup of the table definition, or vice-versa, only the constraint definition will be honored, and the other will be ignored.

注意

このコンテキストでは、default はキーワードではありません。In this context, default is not a keyword. これは、既定ファイル グループの識別子なので、ON "default" または ON [ default ] のように区切る必要があります。It is an identifier for the default filegroup and must be delimited, as in ON "default" or ON [ default ]. "default" を指定する場合は、現在のセッションに対して QUOTED_IDENTIFIER オプションが ON である必要があります。If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. これが既定の設定です。This is the default setting. 詳しくは、「SET QUOTED_IDENTIFIER」をご覧ください。For more information, see SET QUOTED_IDENTIFIER.

パーティション テーブルを作成した後、テーブルの LOCK_ESCALATION オプションを AUTO に設定することを検討してください。After you create a partitioned table, consider setting the LOCK_ESCALATION option for the table to AUTO. これにより、テーブルではなくパーティション (HoBT) レベルにロックをエスカレートできるようにすることで、コンカレンシーを向上させることができます。This can improve concurrency by enabling locks to escalate to partition (HoBT) level instead of the table. 詳細については、「ALTER TABLE」を参照してください。For more information, see ALTER TABLE.

TEXTIMAGE_ON { filegroup| "default" }TEXTIMAGE_ON { filegroup| "default" }
text 列、ntext 列、image 列、xml 列、varchar(max) 列、nvarchar(max) 列、varbinary(max) 、および CLR ユーザー定義型の列 (geometry 型や geography 型など) が、指定したファイル グループに格納されることを示します。Indicates that the text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max), and CLR user-defined type columns (including geometry and geography) are stored on the specified filegroup.

テーブル内に値の大きな列がない場合は、TEXTIMAGE_ON は指定できません。TEXTIMAGE_ON is not allowed if there are no large value columns in the table. partition_scheme を指定した場合は、TEXTIMAGE_ON を指定できません。TEXTIMAGE_ON cannot be specified if partition_scheme is specified. "default" を指定するか、TEXTIMAGE_ON をまったく指定しないと、値の大きな列は既定のファイル グループに格納されます。If "default" is specified, or if TEXTIMAGE_ON is not specified at all, the large value columns are stored in the default filegroup. CREATE TABLE で指定した値の大きな列のデータのストレージを、後から変更することはできません。The storage of any large value column data specified in CREATE TABLE cannot be subsequently altered.

注意

Varchar(max)、nvarchar(max)、varbinary(max)、xml および大きな UDT 値は、データ行に直接格納されます。レコードのサイズまで値を格納できますが、サイズの上限は 8,000 バイトです。Varchar(max), nvarchar(max), varbinary(max), xml and large UDT values are stored directly in the data row, up to a limit of 8,000 bytes and as long as the value can fit the record. 値がレコードに収まらない場合には、ポインターが行内に格納され、残りは行外の LOB ストレージ領域に格納されます。If the value does not fit in the record, a pointer is sorted in-row and the rest is stored out of row in the LOB storage space. 0 は、すべての値がデータ行に直接格納されていることを示す既定値です。0 is the default value, which indicates that all values are stored directly in the data row.

TEXTIMAGE_ON では、"LOB ストレージ領域" の場所のみが変更され、データが行内に格納されている場合は影響しません。TEXTIMAGE_ON only changes the location of the "LOB storage space", it does not affect when data is stored in-row. sp_tableoption の large value types out of row オプションを使用すると、LOB 値全体が行外に格納されます。Use large value types out of row option of sp_tableoption to store the entire LOB value out of the row.

このコンテキストでは、default はキーワードではありません。In this context, default is not a keyword. これは、既定ファイル グループの識別子なので、TEXTIMAGE_ON "default" または TEXTIMAGE_ON [default] のように区切る必要があります。It is an identifier for the default filegroup and must be delimited, as in TEXTIMAGE_ON "default" or TEXTIMAGE_ON [default]. "default" を指定する場合は、現在のセッションに対して QUOTED_IDENTIFIER オプションが ON である必要があります。If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. これが既定の設定です。This is the default setting. 詳しくは、「SET QUOTED_IDENTIFIER」をご覧ください。For more information, see SET QUOTED_IDENTIFIER.

FILESTREAM_ON { partition_scheme_name | filegroup | " default " }FILESTREAM_ON { partition_scheme_name | filegroup | " default " }
適用対象: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 から SQL Server 2017SQL Server 2017 まで)。Applies to: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 through SQL Server 2017SQL Server 2017). Azure SQL データベースAzure SQL Database では、FILESTREAM はサポートされていません。does not support FILESTREAM.

FILESTREAM データのファイル グループを指定します。Specifies the filegroup for FILESTREAM data.

テーブルが FILESTREAM データを含んでおり、テーブルがパーティション分割されている場合、FILESTREAM_ON 句を使用して、FILESTREAM ファイル グループのパーティション構成を指定する必要があります。If the table contains FILESTREAM data and the table is partitioned, the FILESTREAM_ON clause must be included and must specify a partition scheme of FILESTREAM filegroups. このパーティション構成では、テーブルのパーティション構成と同じパーティション関数とパーティション列を使用する必要があります。それ以外の場合は、エラーが発生します。This partition scheme must use the same partition function and partition columns as the partition scheme for the table; otherwise, an error is raised.

テーブルがパーティション分割されていない場合、FILESTREAM 列をパーティション分割することはできません。If the table is not partitioned, the FILESTREAM column cannot be partitioned. テーブルの FILESTREAM データは、単一のファイル グループに格納する必要があります。FILESTREAM data for the table must be stored in a single filegroup. このファイル グループは、FILESTREAM_ON 句で指定します。This filegroup is specified in the FILESTREAM_ON clause.

テーブルがパーティション分割されておらず、FILESTREAM_ON 句も指定されていない場合、DEFAULT プロパティ セットが使用されている FILESTREAM ファイル グループが使用されます。If the table is not partitioned and the FILESTREAM_ON clause is not specified, the FILESTREAM filegroup that has the DEFAULT property set is used. FILESTREAM ファイル グループがない場合は、エラーが発生します。If there is no FILESTREAM filegroup, an error is raised.

ON や TEXTIMAGE_ON と同様に、FILESTREAM_ONCREATE TABLE を使用して設定された値は、次の場合を除いて変更できません。As with ON and TEXTIMAGE_ON, the value set by using CREATE TABLE for FILESTREAM_ON cannot be changed, except in the following cases:

  • CREATE INDEX ステートメントでヒープをクラスター化インデックスに変換する。A CREATE INDEX statement converts a heap into a clustered index. この場合は、異なる FILESTREAM ファイル グループ、パーティション構成、または NULL を指定できます。In this case, a different FILESTREAM filegroup, partition scheme, or NULL can be specified.
  • DROP INDEX ステートメントでクラスター化インデックスをヒープに変換する。A DROP INDEX statement converts a clustered index into a heap. この場合は、異なる FILESTREAM ファイル グループ、パーティション構成、または "default" を指定できます。In this case, a different FILESTREAM filegroup, partition scheme, or "default" can be specified.

FILESTREAM_ON <filegroup> 句のファイル グループ、またはパーティション構成で指定されている各 FILESTREAM ファイル グループには、ファイルが 1 つ定義されている必要があります。The filegroup in the FILESTREAM_ON <filegroup> clause, or each FILESTREAM filegroup that is named in the partition scheme, must have one file defined for the filegroup. このファイルは、CREATE DATABASE ステートメントまたは ALTER DATABASE ステートメントを使用して定義する必要があります。それ以外の場合は、エラーが発生します。This file must be defined by using a CREATE DATABASE or ALTER DATABASE statement; otherwise, an error is raised.

FILESTREAM の関連トピックについては、バイナリ ラージ オブジェクト - BLOB データに関するページをご覧ください。For related FILESTREAM topics, see Binary Large Object - Blob Data.

[ type_schema_name .[ type_schema_name. ] type_name ] type_name
列のデータ型と、そのデータ型が所属するスキーマを指定します。Specifies the data type of the column, and the schema to which it belongs. ディスク ベース テーブルの場合、データ型は次のいずれかです。For disk-based tables, the data type can be one of the following:

  • システム データ型A system data type
  • SQL ServerSQL Server のシステム データ型に基づく別名型。An alias type based on a SQL ServerSQL Server system data type. 別名データ型は、CREATE TYPE ステートメントを使って作成した後、テーブル定義で使用できます。Alias data types are created with the CREATE TYPE statement before they can be used in a table definition. 別名データ型用の NULL/NOT NULL 割り当ては、CREATE TABLE ステートメントの中でオーバーライドできます。The NULL or NOT NULL assignment for an alias data type can be overridden during the CREATE TABLE statement. ただし、長さ指定は変更できません。CREATE TABLE ステートメント中の別名データ型の長さは指定できません。However, the length specification cannot be changed; the length for an alias data type cannot be specified in a CREATE TABLE statement.
  • CLR ユーザー定義型。A CLR user-defined type. CLR ユーザー定義型をテーブル定義の中で使用するには、まず、CREATE TYPE ステートメントで CLR ユーザー定義型を作成する必要があります。CLR user-defined types are created with the CREATE TYPE statement before they can be used in a table definition. CLR ユーザー定義型の列を作成するには、その型に対する REFERENCES 権限が必要です。To create a column on CLR user-defined type, REFERENCES permission is required on the type.

type_schema_name を指定しない場合、SQL Server データベース エンジンSQL Server Database Engineは次の順序で type_name を参照します。If type_schema_name is not specified, the SQL Server データベース エンジンSQL Server Database Engine references type_name in the following order:

  • SQL ServerSQL Server のシステム データ型The SQL ServerSQL Server system data type.
  • 現在のデータベースにおける現在のユーザーの既定のスキーマ。The default schema of the current user in the current database.
  • 現在のデータベースの dbo スキーマ。The dbo schema in the current database.

メモリ最適化テーブルでサポートされるシステム型の一覧については、「インメモリ OLTP に対してサポートされるデータ型」をご覧ください。For memory-optimized tables, see Supported Data Types for In-Memory OLTP for a list of supported system types.

有効桁数 precision
指定されるデータ型の有効桁数です。Is the precision for the specified data type. 有効桁数の詳細については、「有効桁数、小数点以下桁数、および長さ (Transact-SQL)」を参照してください。For more information about valid precision values, see Precision, Scale, and Length.

小数点以下桁数 scale
指定されるデータ型の小数点以下桁数です。Is the scale for the specified data type. 有効な小数点以下桁数の詳細については、「有効桁数、小数点以下桁数、および長さ (Transact-SQL)」を参照してください。For more information about valid scale values, see Precision, Scale, and Length.

最大 max
データ型 varcharnvarcharvarbinary だけに適用され、2^31 バイトの文字データとバイナリ データ、および 2^30 バイトの Unicode データが格納されます。Applies only to the varchar, nvarchar, and varbinary data types for storing 2^31 bytes of character and binary data, and 2^30 bytes of Unicode data.

CONTENTCONTENT
column_name 内の xml データ型の各インスタンスに、複数のトップレベル要素を含められることを指定します。Specifies that each instance of the xml data type in column_name can contain multiple top-level elements. CONTENT は、xml データ型のみに適用され、xml_schema_collection も指定されている場合にだけ指定できます。CONTENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified. 指定しない場合は、CONTENT が既定の動作となります。If not specified, CONTENT is the default behavior.

DOCUMENTDOCUMENT
column_name 内の xml データ型の各インスタンスに、1 つのトップレベル要素のみを含められることを指定します。Specifies that each instance of the xml data type in column_name can contain only one top-level element. DOCUMENT は、xml データ型のみに適用され、xml_schema_collection も指定されている場合にだけ指定できます。DOCUMENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified.

xml_schema_collection xml_schema_collection
xml データ型にのみ適用されます。XML スキーマ コレクションとこのデータ型を関連付けるためのものです。Applies only to the xml data type for associating an XML schema collection with the type. スキーマで xml 列を使用するには、まず、CREATE XML SCHEMA COLLECTION を使用してデータベース内にスキーマを作成する必要があります。Before typing an xml column to a schema, the schema must first be created in the database by using CREATE XML SCHEMA COLLECTION.

DEFAULTDEFAULT
挿入の際に明示的な値を指定しない場合に、列に入力される値を指定します。Specifies the value provided for the column when a value is not explicitly supplied during an insert. DEFAULT 定義は、timestamp として定義された列または IDENTITY プロパティを持つ列以外のすべての列に適用できます。DEFAULT definitions can be applied to any columns except those defined as timestamp, or those with the IDENTITY property. ユーザー定義型の列に既定値を指定する場合は、その型で constant_expression 型からユーザー定義型への暗黙的な変換がサポートされている必要があります。If a default value is specified for a user-defined type column, the type should support an implicit conversion from constant_expression to the user-defined type. テーブルが削除されると、DEFAULT 定義は削除されます。DEFAULT definitions are removed when the table is dropped. 既定値として使用できるのは、文字列などの定数値、スカラー関数 (システム、ユーザー定義、CLR 関数のいずれか)、または NULL のみです。Only a constant value, such as a character string; a scalar function (either a system, user-defined, or CLR function); or NULL can be used as a default. SQL ServerSQL Server の旧バージョンとの互換性を保つため、DEFAULT に制約名を割り当てることができます。To maintain compatibility with earlier versions of SQL ServerSQL Server, a constraint name can be assigned to a DEFAULT.

constant_expression constant_expression
列の既定値として使用される定数、NULL またはシステム関数です。Is a constant, NULL, or a system function that is used as the default value for the column.

memory_optimized_constant_expression memory_optimized_constant_expression
列の既定値として使用できる定数、NULL、システム関数です。Is a constant, NULL, or a system function that is supported in used as the default value for the column. ネイティブ コンパイル ストアド プロシージャでサポートされている必要があります。Must be supported in natively compiled stored procedures. ネイティブ コンパイル ストアド プロシージャの組み込み関数について詳しくは、「ネイティブ コンパイル T-SQL モジュールでサポートされる機能」をご覧ください。For more information about built-in functions in natively compiled stored procedures, see Supported Features for Natively Compiled T-SQL Modules.

IDENTITYIDENTITY
新しい列が ID 列であることを指定します。Indicates that the new column is an identity column. テーブルに行が新しく追加されると、データベース エンジンDatabase Engineは列に一意な増分の値を設定します。When a new row is added to the table, the データベース エンジンDatabase Engine provides a unique, incremental value for the column. ID 列は通常、PRIMARY KEY 制約と共に使用され、テーブルの一意な行識別子 (ROWID) の役割を果たします。Identity columns are typically used with PRIMARY KEY constraints to serve as the unique row identifier for the table. IDENTITY プロパティは、tinyintsmallintintbigintdecimal(p,0)numeric(p,0) のいずれかの列に割り当てることができます。The IDENTITY property can be assigned to tinyint, smallint, int, bigint, decimal(p,0), or numeric(p,0) columns. ID 列は 1 つのテーブルにつき 1 つだけ作成できます。Only one identity column can be created per table. バインドされた既定値および DEFAULT 制約を ID 列と共に使用することはできません。Bound defaults and DEFAULT constraints cannot be used with an identity column. seed と increment の両方を指定するか、またはどちらも指定しません。Both the seed and increment or neither must be specified. どちらも指定しないときの既定値は (1,1) です。If neither is specified, the default is (1,1).

seed seed
テーブルに読み込まれる最初の行に使用される値です。Is the value used for the very first row loaded into the table.

increment increment
読み込まれている前の行の ID 値に加算される増分値です。Is the incremental value added to the identity value of the previous row loaded.

NOT FOR REPLICATIONNOT FOR REPLICATION
CREATE TABLE ステートメントでは、IDENTITY プロパティ、FOREIGN KEY 制約、CHECK 制約で NOT FOR REPLICATION 句を指定できます。In the CREATE TABLE statement, the NOT FOR REPLICATION clause can be specified for the IDENTITY property, FOREIGN KEY constraints, and CHECK constraints. IDENTITY プロパティでこの句を指定すると、レプリケーション エージェントが挿入を行うときに ID 列の値が増加されません。If this clause is specified for the IDENTITY property, values are not incremented in identity columns when replication agents perform inserts. 制約でこの句を指定すると、レプリケーション エージェントが挿入、更新、削除操作を行う際に制約が適用されません。If this clause is specified for a constraint, the constraint is not enforced when replication agents perform insert, update, or delete operations.

GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] [ NOT NULL ]GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] [ NOT NULL ]
適用対象: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL Server 2017SQL Server 2017) と Azure SQL データベースAzure SQL DatabaseApplies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Azure SQL データベースAzure SQL Database.

指定した datetime2 列が、システムによって、レコードの有効期限の開始時刻またはレコードの有効期限の終了時刻のいずれかを記録するために使用されることを指定します。Specifies that a specified datetime2 column will be used by the system to record either the start time for which a record is valid or the end time for which a record is valid. 列を NOT NULL として定義する必要があります。The column must be defined as NOT NULL. それらを NULL として指定しようとすると、システムによりエラーがスローされます。If you attempt to specify them as NULL, the system will throw an error. 期間列に対して明示的に NOT NULL を指定しない場合、システムにより既定で列が NOT NULL として定義されます。If you do not explicitly specify NOT NULL for a period column, the system will define the column as NOT NULL by default. PERIOD FOR SYSTEM_TIME および WITH SYSTEM_VERSIONING = ON 引数と組み合わせてこの引数を使い、テーブル上でシステムのバージョン管理を有効にします。Use this argument in conjunction with the PERIOD FOR SYSTEM_TIME and WITH SYSTEM_VERSIONING = ON arguments to enable system versioning on a table. 詳細については、「 Temporal Tables」を参照してください。For more information, see Temporal Tables.

1 つまたは両方の期間列を HIDDEN フラグでマークしてこれらの列を暗黙的に非表示にし、SELECT * FROM <table> がこれらの列の値を返さないようにすることができます。You can mark one or both period columns with HIDDEN flag to implicitly hide these columns such that SELECT * FROM<table> does not return a value for those columns. 既定では、期間列は非表示ではありません。By default, period columns are not hidden. 非表示の列を使用するためには、テンポラル テーブルを直接参照するすべてのクエリで明示的に含める必要があります。In order to be used, hidden columns must be explicitly included in all queries that directly reference the temporal table. 変更する、 HIDDEN を既存の期間列の属性 期間 削除し、別の非表示フラグを再作成する必要があります。To change the HIDDEN attribute for an existing period column, PERIOD must be dropped and recreated with a different hidden flag.

INDEX index_name [ CLUSTERED | NONCLUSTERED ] (column_name [ ASC | DESC ] [ ,... n ] )INDEX index_name [ CLUSTERED | NONCLUSTERED ] (column_name [ ASC | DESC ] [ ,... n ] )
適用対象: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) から SQL Server 2017SQL Server 2017) と Azure SQL データベースAzure SQL DatabaseApplies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Azure SQL データベースAzure SQL Database.

テーブル上にインデックスを作成することを指定します。Specifies to create an index on the table. これには、クラスター化インデックスまたは非クラスター化インデックスを指定できます。This can be a clustered index, or a nonclustered index. インデックスには一覧表示される列が含まれ、昇順、降順のいずれかでデータが並べ替えられます。The index will contain the columns listed, and will sort the data in either ascending or descending order.

INDEX index_name CLUSTERED COLUMNSTOREINDEX index_name CLUSTERED COLUMNSTORE
適用対象: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) から SQL Server 2017SQL Server 2017) と Azure SQL データベースAzure SQL DatabaseApplies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Azure SQL データベースAzure SQL Database.

テーブル全体を、列形式で、クラスター化列ストア インデックスを使って格納することを指定します。Specifies to store the entire table in columnar format with a clustered columnstore index. これには常に、テーブル内のすべての列が含まれます。This always includes all columns in the table. 列ストア圧縮のベネフィットを得るように列が構成されるため、データはアルファベットや数値順に並べ替えられません。The data is not sorted in alphabetical or numeric order since the rows are organized to gain columnstore compression benefits.

INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )
適用対象: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) から SQL Server 2017SQL Server 2017) と Azure SQL データベースAzure SQL DatabaseApplies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Azure SQL データベースAzure SQL Database.

テーブル上に非クラスター化列ストア インデックスを作成することを指定します。Specifies to create a nonclustered columnstore index on the table. 基になるテーブルには、行ストア ヒープまたはクラスター化インデックスを指定するか、クラスター化列ストア インデックスを指定することができます。The underlying table can be a rowstore heap or clustered index, or it can be a clustered columnstore index. すべての場合で、テーブルに非クラスター化列ストア インデックスを作成すると、列のデータの 2 番目のコピーがインデックスに格納されます。In all cases, creating a nonclustered columnstore index on a table stores a second copy of the data for the columns in the index.

非クラスター化列ストア インデックスは、クラスター化列ストア インデックスとして格納および管理されます。The nonclustered columnstore index is stored and managed as a clustered columnstore index. これも非クラスター化列ストア インデックスと呼ばれます。列を制限することができ、テーブル上のセカンダリ インデックスとして存在するためです。It is called a nonclustered columnstore index to because the columns can be limited and it exists as a secondary index on a table.

ON partition_scheme_name ( column_name ) ON partition_scheme_name(column_name)
ファイル グループが定義されているパーティション構成を指定します。このファイル グループは、パーティション インデックスのパーティションのマップ先となります。Specifies the partition scheme that defines the filegroups onto which the partitions of a partitioned index will be mapped. CREATE PARTITION SCHEME または ALTER PARTITION SCHEME を実行して、パーティション構成がデータベース内に存在するようにする必要があります。The partition scheme must exist within the database by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME. column_name には、パーティション インデックスがパーティション分割される対象の列を指定します。column_name specifies the column against which a partitioned index will be partitioned. この列は、partition_scheme_name で使用されているパーティション関数の引数のデータ型、長さ、および有効桁数に一致する必要があります。This column must match the data type, length, and precision of the argument of the partition function that partition_scheme_name is using. column_name インデックス定義内の列に限定されません。column_name is not restricted to the columns in the index definition. UNIQUE インデックスをパーティション分割する場合、column_name は一意のキーとして使用されている列から選択する必要がありますが、それ以外の場合はベース テーブルの任意の列を指定できます。Any column in the base table can be specified, except when partitioning a UNIQUE index, column_name must be chosen from among those used as the unique key. この制限により、データベース エンジンDatabase Engineでは、単一のパーティション内だけでキー値の一意性を確認できます。This restriction allows the データベース エンジンDatabase Engine to verify uniqueness of key values within a single partition only.

注意

一意でないクラスター化インデックスをパーティション分割するとき、データベース エンジンDatabase Engineでは既定により、まだ指定されていない場合、パーティション分割列がクラスター化インデックス キーのリストに追加されます。When you partition a non-unique, clustered index, the データベース エンジンDatabase Engine by default adds the partitioning column to the list of clustered index keys, if it is not already specified. 一意でない非クラスター化インデックスをパーティション分割するとき、データベース エンジンDatabase Engineでは、まだ指定されていない場合、パーティション分割列がインデックスの非キー列 (付加列) として追加されます。When partitioning a non-unique, nonclustered index, the データベース エンジンDatabase Engine adds the partitioning column as a non-key (included) column of the index, if it is not already specified.

partition_scheme_name または filegroup が指定されないまま、テーブルがパーティション分割されると、インデックスは基になるテーブルと同じパーティション分割列を使用して、同じパーティション構造に配置されます。If partition_scheme_name or filegroup is not specified and the table is partitioned, the index is placed in the same partition scheme, using the same partitioning column, as the underlying table.

注意

XML インデックスにはパーティション構成を指定できません。You cannot specify a partitioning scheme on an XML index. ベース テーブルがパーティション分割される場合、XML インデックスではテーブルと同じパーティション構造が使用されます。If the base table is partitioned, the XML index uses the same partition scheme as the table.

パーティション分割の詳細については、「パーティション テーブルとパーティション インデックス」を参照してください。For more information about partitioning indexes, Partitioned Tables and Indexes.

ON filegroup_name ON filegroup_name
指定したファイル グループに、指定したインデックスを作成します。Creates the specified index on the specified filegroup. 位置の指定がなく、テーブルまたはビューがパーティション分割されていない場合、インデックスには、基になるテーブルまたはビューと同じファイル グループが使用されます。If no location is specified and the table or view is not partitioned, the index uses the same filegroup as the underlying table or view. ファイル グループは既に存在している必要があります。The filegroup must already exist.

ON "default" ON "default"
既定のファイル グループに、指定したインデックスを作成します。Creates the specified index on the default filegroup.

このコンテキストでの default という用語はキーワードではありません。The term default, in this context, is not a keyword. これは、既定ファイル グループの識別子なので、ON "default" または ON [default] のように区切る必要があります。It is an identifier for the default filegroup and must be delimited, as in ON "default" or ON [default]. "default" を指定する場合は、現在のセッションに対して QUOTED_IDENTIFIER オプションが ON である必要があります。If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. これが既定の設定です。This is the default setting. 詳しくは、「SET QUOTED_IDENTIFIER」をご覧ください。For more information, see SET QUOTED_IDENTIFIER.

[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ][ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
適用対象: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 から SQL Server 2017SQL Server 2017 まで)。Applies to: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 through SQL Server 2017SQL Server 2017).

クラスター化インデックスの作成時に、テーブルの FILESTREAM データの配置を指定します。Specifies the placement of FILESTREAM data for the table when a clustered index is created. FILESTREAM_ON 句を使用すると、異なる FILESTREAM ファイル グループやパーティション構成に FILESTREAM データを移動できます。The FILESTREAM_ON clause allows FILESTREAM data to be moved to a different FILESTREAM filegroup or partition scheme.

filestream_filegroup_name FILESTREAM ファイル グループの名前を指定します。filestream_filegroup_name is the name of a FILESTREAM filegroup. ファイル グループには、CREATE DATABASE ステートメントまたは ALTER DATABASE ステートメントを使用してファイルが 1 つ定義されている必要があります。それ以外の場合は、エラーが発生します。The filegroup must have one file defined for the filegroup by using a CREATE DATABASE or ALTER DATABASE statement; otherwise, an error is raised.

テーブルがパーティション分割されている場合、FILESTREAM_ON 句を使用して、テーブルのパーティション構成と同じパーティション関数とパーティション列を使用するように、FILESTREAM ファイル グループのパーティション構成を指定する必要があります。If the table is partitioned, the FILESTREAM_ON clause must be included and must specify a partition scheme of FILESTREAM filegroups that uses the same partition function and partition columns as the partition scheme for the table. それ以外の場合は、エラーが発生します。Otherwise, an error is raised.

テーブルがパーティション分割されていない場合、FILESTREAM 列をパーティション分割することはできません。If the table is not partitioned, the FILESTREAM column cannot be partitioned. テーブルの FILESTREAM データは、FILESTREAM_ON 句で指定した単一のファイル グループに格納する必要があります。FILESTREAM data for the table must be stored in a single filegroup that is specified in the FILESTREAM_ON clause.

クラスター化インデックスの作成で、テーブルに FILESTREAM 列が含まれていないときは、CREATE INDEX ステートメントに FILESTREAM_ON NULL を指定できます。FILESTREAM_ON NULL can be specified in a CREATE INDEX statement if a clustered index is being created and the table does not contain a FILESTREAM column.

詳細については、FILESTREAM に関するページをご覧ください。For more information, see FILESTREAM.

ROWGUIDCOLROWGUIDCOL
新しい列が行の GUID 列であることを示します。Indicates that the new column is a row GUID column. 1 つのテーブルにつき、1 つの uniqueidentifier 列だけを ROWGUIDCOL 列に指定できます。Only one uniqueidentifier column per table can be designated as the ROWGUIDCOL column. ROWGUIDCOL プロパティを適用すると、$ROWGUID を使用して列を参照できるようになります。Applying the ROWGUIDCOL property enables the column to be referenced using $ROWGUID. ROWGUIDCOL プロパティは uniqueidentifier 列にだけ割り当てることができます。The ROWGUIDCOL property can be assigned only to a uniqueidentifier column. ユーザー定義データ型の列に ROWGUIDCOL を指定することはできません。User-defined data type columns cannot be designated with ROWGUIDCOL.

ROWGUIDCOL プロパティは、列に格納されている値の一意性を設定しません。The ROWGUIDCOL property does not enforce uniqueness of the values stored in the column. また、ROWGUIDCOL プロパティは、テーブルに挿入される新しい行の値を自動的に生成しません。ROWGUIDCOL also does not automatically generate values for new rows inserted into the table. 各列に対して一意な値を生成するには、INSERT ステートメントで NEWID 関数または NEWSEQUENTIALID 関数を使用するか、これらの関数を列の既定値として使用します。To generate unique values for each column, either use the NEWID or NEWSEQUENTIALID function on INSERT statements or use these functions as the default for the column.

ENCRYPTED WITHENCRYPTED WITH
Always Encrypted 機能を使って暗号化列を指定します。Specifies encrypting columns by using the Always Encrypted feature.

COLUMN_ENCRYPTION_KEY = key_name COLUMN_ENCRYPTION_KEY = key_name
列の暗号化キーを指定します。Specifies the column encryption key. 詳細については、CREATE COLUMN ENCRYPTION KEY に関するページをご覧ください。For more information, see CREATE COLUMN ENCRYPTION KEY.

ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }
確定的な暗号化 は常に任意のプレーン テキストを指定した値の場合は、同じ暗号化された値を生成するメソッドを使用します。Deterministic encryption uses a method which always generates the same encrypted value for any given plain text value. 決定論的な暗号化を使うことにより、等価比較を使った検索や、グループ化、暗号化された値に基づく等価結合を使ったテーブルの結合が可能になりますが、承認されていないユーザーが、暗号化された列のパターンを調べることで暗号化された値に関する情報を推測することも可能になります。Using deterministic encryption allows searching using equality comparison, grouping, and joining tables using equality joins based on encrypted values, but can also allow unauthorized users to guess information about encrypted values by examining patterns in the encrypted column. 決定論的に暗号化された列で 2 つのテーブルを結合することができるのは、両方の列が同じ列暗号化キーを使って暗号化されている場合のみです。Joining two tables on columns encrypted deterministically is only possible if both columns are encrypted using the same column encryption key. 明確な暗号化では、バイナリ 2 文字型の列の並べ替え順序を持つ列の照合順序を使用する必要があります。Deterministic encryption must use a column collation with a binary2 sort order for character columns.

暗号化をランダム化 は低い予測可能な方法でデータを暗号化するためのメソッドを使用します。Randomized encryption uses a method that encrypts data in a less predictable manner. ランダム化された暗号化は、より安全ですが、SQL Server インスタンスでセキュア エンクレーブを使用する Always Encrypted がサポートされる場合を除き、暗号化された列に対する計算とインデックス作成はすべて阻止されます。Randomized encryption is more secure, but it prevents any computations and indexing on encrypted columns, unless your SQL Server instance supports Always Encrypted with secure enclaves. 詳しくは、「Always Encrypted with secure enclaves」(セキュア エンクレーブを使用する Always Encrypted) をご覧ください。Please see Always Encrypted with secure enclaves for details.

Always Encrypted (セキュア エンクレーブなし) を使用している場合、政府の ID 番号などのパラメーターまたはグループ化パラメーターで検索される列には、決定論的な暗号化を使用します。If you are using Always Encrypted (without secure enclaves), use deterministic encryption for columns that will be searched with parameters or grouping parameters, for example a government ID number. ランダム化された暗号化は、他のレコードとグループ化されたりテーブルの結合に使用されたりせず、関心のある暗号化された列を含む行の検索に他の列 (トランザクション番号など) を使用するため検索されない、クレジット カード番号などのデータに使用します。Use randomized encryption, for data such as a credit card number, which is not grouped with other records or used to join tables, and which is not searched for because you use other columns (such as a transaction number) to find the row which contains the encrypted column of interest.

セキュア エンクレーブを使用する Always Encrypted を使用する場合は、ランダム化された暗号化が推奨される暗号化の種類です。If you are using Always Encrypted with secure enclaves, randomized encryption is a recommended encryption type.

列は、該当するデータ型である必要があります。Columns must be of a qualifying data type.

ALGORITHMALGORITHM
適用対象: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL Server 2017SQL Server 2017 まで)。Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017).

'AEAD_AES_256_CBC_HMAC_SHA_256' を指定する必要があります。Must be 'AEAD_AES_256_CBC_HMAC_SHA_256'.

機能の制約などについて詳しくは、Always Encrypted に関するページをご覧ください。For more information including feature constraints, see Always Encrypted.

SPARSESPARSE
列がスパース列であることを示します。Indicates that the column is a sparse column. スパース列のストレージは NULL 値用に最適化されます。The storage of sparse columns is optimized for null values. スパース列を NOT NULL として指定することはできません。Sparse columns cannot be designated as NOT NULL. スパース列のその他の制限事項と詳細については、「スパース列の使用」を参照してください。For additional restrictions and more information about sparse columns, see Use Sparse Columns.

MASKED WITH ( FUNCTION = ' mask_function ')MASKED WITH ( FUNCTION = ' mask_function ')
適用対象: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL Server 2017SQL Server 2017 まで)。Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017).

動的なデータ マスクを指定します。Specifies a dynamic data mask. mask_function マスキング関数は、適切なパラメーターの名前を指定します。mask_function is the name of the masking function with the appropriate parameters. 次の 4 つの関数を使用できます。Four functions are available:

  • default()default()
  • email()email()
  • partial()partial()
  • random()random()

関数のパラメーターについては、「動的なデータ マスキング」を参照してください。For function parameters, see Dynamic Data Masking.

FILESTREAMFILESTREAM
適用対象: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 から SQL Server 2017SQL Server 2017まで)Applies to: SQL ServerSQL Server (SQL Server 2008 R2SQL Server 2008 R2 through SQL Server 2017SQL Server 2017)

varbinary(max) 列に対してのみ有効です。Valid only for varbinary(max) columns. varbinary (max) BLOB データの FILESTREAM ストレージを指定します。Specifies FILESTREAM storage for the varbinary(max) BLOB data.

また、ROWGUIDCOL 属性を持つ uniqueidentifier データ型の列がテーブルに存在する必要があります。The table must also have a column of the uniqueidentifier data type that has the ROWGUIDCOL attribute. この列では、null 値を許可してはならず、また UNIQUE、PRIMARY KEY のいずれかの単一列制約を持つ必要があります。This column must not allow null values and must have either a UNIQUE or PRIMARY KEY single-column constraint. 列の GUID 値は、データの挿入時にアプリケーションによって、または NEWID () 関数を使用する DEFAULT 制約によって、提供する必要があります。The GUID value for the column must be supplied either by an application when inserting data, or by a DEFAULT constraint that uses the NEWID () function.

テーブルに FILESTREAM 列が定義されている間は、ROWGUIDCOL 列を削除したり、関連する制約を変更したりすることはできません。The ROWGUIDCOL column cannot be dropped and the related constraints cannot be changed while there is a FILESTREAM column defined for the table. ROWGUIDCOL 列は、最後の FILESTREAM 列を削除した後にのみ削除できます。The ROWGUIDCOL column can be dropped only after the last FILESTREAM column is dropped.

列に対して FILESTREAM ストレージ属性を指定した場合、この列のすべての値がファイル システム上の FILESTREAM データ コンテナーに格納されます。When the FILESTREAM storage attribute is specified for a column, all values for that column are stored in a FILESTREAM data container on the file system.

COLLATE collation_name COLLATE collation_name
列の照合順序を指定します。Specifies the collation for the column. 照合順序名には、Windows 照合順序名または SQL 照合順序名を指定できます。Collation name can be either a Windows collation name or an SQL collation name. collation_name は、charvarchartextncharnvarchar、および ntext データ型の列に対してのみ適用可能です。collation_name is applicable only for columns of the char, varchar, text, nchar, nvarchar, and ntext data types. 指定しない場合、ユーザー定義データ型の列である場合は列にユーザー定義データ型の照合順序が割り当てられ、それ以外の場合はデータベースの既定の照合順序が割り当てられます。If not specified, the column is assigned either the collation of the user-defined data type, if the column is of a user-defined data type, or the default collation of the database.

Windows の照合順序名および SQL の照合順序名の詳細については、「Windows 照合順序名 (Transact-SQL)」および「SQL 照合順序名 (Transact-SQL)」を参照してください。For more information about the Windows and SQL collation names, see Windows Collation Name and SQL Collation Name.

詳しくは、「COLLATE」をご覧ください。For more information, see COLLATE.

CONSTRAINTCONSTRAINT
PRIMARY KEY 制約、NOT NULL 制約、UNIQUE 制約、FOREIGN KEY 制約、または CHECK 制約の定義の開始を示す省略可能なキーワードです。Is an optional keyword that indicates the start of the definition of a PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY, or CHECK constraint.

constraint_name constraint_name
制約の名前です。Is the name of a constraint. 制約名は、テーブルが所属するスキーマ内で一意である必要があります。Constraint names must be unique within the schema to which the table belongs.

NULL | NOT NULLNULL | NOT NULL
列で NULL 値を許容するかどうかを示します。Determine whether null values are allowed in the column. NULL は厳密には制約ではありませんが、NOT NULL と同じように指定することができます。NULL is not strictly a constraint but can be specified just like NOT NULL. 計算列で NOT NULL を指定できるのは、PERSISTED も指定した場合のみです。NOT NULL can be specified for computed columns only if PERSISTED is also specified.

PRIMARY KEYPRIMARY KEY
一意なインデックスによって、指定した 1 つ以上の列にエンティティの整合性を設定する制約です。Is a constraint that enforces entity integrity for a specified column or columns through a unique index. PRIMARY KEY 制約は、1 つのテーブルにつき 1 つだけ作成できます。Only one PRIMARY KEY constraint can be created per table.

UNIQUEUNIQUE
一意なインデックスによって、指定した 1 つ以上の列にエンティティの整合性を提供する制約です。Is a constraint that provides entity integrity for a specified column or columns through a unique index. 1 つのテーブルには複数の UNIQUE 制約を指定できます。A table can have multiple UNIQUE constraints.

CLUSTERED | NONCLUSTEREDCLUSTERED | NONCLUSTERED
PRIMARY KEY または UNIQUE 制約に対して、クラスター化インデックスまたは非クラスター化インデックスを作成することを示します。Indicate that a clustered or a nonclustered index is created for the PRIMARY KEY or UNIQUE constraint. PRIMARY KEY 制約の既定値は CLUSTERED で、UNIQUE 制約の既定値は NONCLUSTERED です。PRIMARY KEY constraints default to CLUSTERED, and UNIQUE constraints default to NONCLUSTERED.

CREATE TABLE ステートメントでは、1 つの制約に対してのみ CLUSTERED を指定することができます。In a CREATE TABLE statement, CLUSTERED can be specified for only one constraint. UNIQUE 制約で CLUSTERED が指定され、PRIMARY KEY 制約も指定した場合には、PRIMARY KEY の既定値は NONCLUSTERED になります。If CLUSTERED is specified for a UNIQUE constraint and a PRIMARY KEY constraint is also specified, the PRIMARY KEY defaults to NONCLUSTERED.

FOREIGN KEY REFERENCESFOREIGN KEY REFERENCES
1 つ以上の列内のデータに参照整合性を持たせる制約です。Is a constraint that provides referential integrity for the data in the column or columns. FOREIGN KEY 制約では、列内の各値が、参照されるテーブル内の対応する参照される列 (1 つまたは複数) に存在している必要があります。FOREIGN KEY constraints require that each value in the column exists in the corresponding referenced column or columns in the referenced table. FOREIGN KEY 制約は、参照されるテーブル内の PRIMARY KEY 制約または UNIQUE 制約である列、または参照されるテーブルの UNIQUE INDEX で参照される列のみを参照できます。FOREIGN KEY constraints can reference only columns that are PRIMARY KEY or UNIQUE constraints in the referenced table or columns referenced in a UNIQUE INDEX on the referenced table. 計算列上の外部キーも、PERSISTED とマークする必要があります。Foreign keys on computed columns must also be marked PERSISTED.

[ schema_name . ] referenced_table_name][ schema_name.] referenced_table_name]
FOREIGN KEY 制約で参照されるテーブル名と、そのテーブルが所属するスキーマ名です。Is the name of the table referenced by the FOREIGN KEY constraint, and the schema to which it belongs.

( ref_column [ , ... n ] ) : FOREIGN KEY 制約によって参照されるテーブルの、列または列の一覧です。( ref_column [ ,... n ] ) Is a column, or list of columns, from the table referenced by the FOREIGN KEY constraint.

ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
作成されたテーブルの行が参照関係を持ち、参照される行が親テーブルから削除された場合に、その行に対して実行される操作を指定します。Specifies what action happens to rows in the table created, if those rows have a referential relationship and the referenced row is deleted from the parent table. 既定値は NO ACTION です。The default is NO ACTION.

NO ACTIONNO ACTION
データベース エンジンDatabase Engine がエラーを生成し、親テーブルでの行の削除操作がロールバックされます。The データベース エンジンDatabase Engine raises an error and the delete action on the row in the parent table is rolled back.

CASCADECASCADE
親テーブルから行が削除された場合に、参照元テーブルからもその行が削除されます。Corresponding rows are deleted from the referencing table if that row is deleted from the parent table.

SET NULLSET NULL
親テーブル内の対応する行が削除されると、外部キーを構成するすべての値に NULL が設定されます。All the values that make up the foreign key are set to NULL if the corresponding row in the parent table is deleted. この制約を実行するには、外部キー列が NULL 値を使用できる必要があります。For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULTSET DEFAULT
親テーブル内の対応する行が削除されると、外部キーを構成するすべての値に既定値が設定されます。All the values that make up the foreign key are set to their default values if the corresponding row in the parent table is deleted. この制約を実行するには、すべての外部キー列に既定値が定義されている必要があります。For this constraint to execute, all foreign key columns must have default definitions. 列が NULL 値を許容し、明示的な既定値が設定されていない場合は、列の既定値として NULL が暗黙的に使用されます。If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

論理レコードを使用するマージ パブリケーションにテーブルを含める場合、CASCADE は使用しないでください。Do not specify CASCADE if the table will be included in a merge publication that uses logical records. 論理レコードの詳細については、「論理レコードによる関連行への変更をグループ化」を参照してください。For more information about logical records, see Group Changes to Related Rows with Logical Records.

INSTEAD OF トリガーの ON DELETE が既にテーブルに存在する場合は、ON DELETE CASCADE を定義できません。ON DELETE CASCADE cannot be defined if an INSTEAD OF trigger ON DELETE already exists on the table.

たとえば、AdventureWorks2012AdventureWorks2012 データベースで、ProductVendor テーブルに Vendor テーブルとの参照関係があるとします。For example, in the AdventureWorks2012AdventureWorks2012 database, the ProductVendor table has a referential relationship with the Vendor table. ここで、ProductVendor.BusinessEntityID 外部キーは Vendor.BusinessEntityID 主キーを参照します。The ProductVendor.BusinessEntityID foreign key references the Vendor.BusinessEntityID primary key.

DELETE ステートメントを Vendor テーブルの行で実行した場合、ON DELETE CASCADE アクションが ProductVendor.BusinessEntityID に対して指定されていると、データベース エンジンDatabase Engine では ProductVendor テーブルに 1 つ以上の従属行があるかどうかが確認されます。If a DELETE statement is executed on a row in the Vendor table, and an ON DELETE CASCADE action is specified for ProductVendor.BusinessEntityID, the データベース エンジンDatabase Engine checks for one or more dependent rows in the ProductVendor table. 従属行がある場合、ProductVendor テーブルの従属行が、Vendor テーブルで参照される行と共に削除されます。If any exist, the dependent rows in the ProductVendor table are deleted, and also the row referenced in the Vendor table.

これに対し、NO ACTION が指定されている場合、ProductVendor テーブルに Vendor テーブルの行を参照する行が 1 つでもあると、データベース エンジンDatabase Engine でエラーが発生し、Vendor 行の削除操作をロールバックします。Conversely, if NO ACTION is specified, the データベース エンジンDatabase Engine raises an error and rolls back the delete action on the Vendor row if there is at least one row in the ProductVendor table that references it.

ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
変更対象のテーブル内の行が参照関係を持ち、親テーブルで参照先の行が更新された場合、変更対象のテーブル内の行に対して発生する操作を指定します。Specifies what action happens to rows in the table altered when those rows have a referential relationship and the referenced row is updated in the parent table. 既定値は NO ACTION です。The default is NO ACTION.

NO ACTIONNO ACTION
NO ACTION を指定すると、データベース エンジンDatabase Engineでエラーが発生し、親テーブルの行の更新操作はロールバックされます。The データベース エンジンDatabase Engine raises an error, and the update action on the row in the parent table is rolled back.

CASCADECASCADE
親テーブルで行が更新された場合に、参照元のテーブルでも対応する行が更新されます。Corresponding rows are updated in the referencing table when that row is updated in the parent table.

SET NULLSET NULL
親テーブルの対応する行が更新された場合、外部キーを形成するすべての値が NULL に設定されます。All the values that make up the foreign key are set to NULL when the corresponding row in the parent table is updated. この制約を実行するには、外部キー列が NULL 値を使用できる必要があります。For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULTSET DEFAULT
親テーブルの対応する行が更新された場合、外部キーを形成するすべての値が既定値に設定されます。All the values that make up the foreign key are set to their default values when the corresponding row in the parent table is updated. この制約を実行するには、すべての外部キー列に既定値が定義されている必要があります。For this constraint to execute, all foreign key columns must have default definitions. 列が NULL 値を許容し、明示的な既定値が設定されていない場合は、列の既定値として NULL が暗黙的に使用されます。If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

論理レコードを使用するマージ パブリケーションにテーブルを含める場合、CASCADE は使用しないでください。Do not specify CASCADE if the table will be included in a merge publication that uses logical records. 論理レコードの詳細については、「論理レコードによる関連行への変更をグループ化」を参照してください。For more information about logical records, see Group Changes to Related Rows with Logical Records.

INSTEAD OF トリガーの ON UPDATE が変更するテーブルに既に存在する場合は、ON UPDATE CASCADESET NULL、または SET DEFAULT を定義できません。ON UPDATE CASCADE, SET NULL, or SET DEFAULT cannot be defined if an INSTEAD OF trigger ON UPDATE already exists on the table that is being altered.

たとえば、AdventureWorks2012AdventureWorks2012 データベースで、ProductVendor テーブルに Vendor テーブルとの参照関係があるとします。ProductVendor.BusinessEntity 外部キーは Vendor.BusinessEntityID 主キーを参照します。For example, in the AdventureWorks2012AdventureWorks2012 database, the ProductVendor table has a referential relationship with the Vendor table: ProductVendor.BusinessEntity foreign key references the Vendor.BusinessEntityID primary key.

UPDATE ステートメントを Vendor テーブルの行で実行した場合、ON UPDATE CASCADE アクションが ProductVendor.BusinessEntityID に対して指定されていると、データベース エンジンDatabase Engineでは ProductVendor テーブルに 1 つ以上の従属行があるかどうかが確認されます。If an UPDATE statement is executed on a row in the Vendor table, and an ON UPDATE CASCADE action is specified for ProductVendor.BusinessEntityID, the データベース エンジンDatabase Engine checks for one or more dependent rows in the ProductVendor table. 従属行がある場合、ProductVendor テーブルの従属行が、Vendor テーブルで参照される行と共に更新されます。If any exist, the dependent rows in the ProductVendor table are updated, and also the row referenced in the Vendor table.

これに対し、NO ACTION が指定されている場合、ProductVendor テーブルに Vendor テーブルの行を参照する行が 1 つでもあると、データベース エンジンDatabase Engineでエラーが発生し、Vendor 行の更新操作をロールバックします。Conversely, if NO ACTION is specified, the データベース エンジンDatabase Engine raises an error and rolls back the update action on the Vendor row if there is at least one row in the ProductVendor table that references it.

CHECKCHECK
1 つ以上の列に入力できる値を制限することによってドメインの整合性を設定する制約です。Is a constraint that enforces domain integrity by limiting the possible values that can be entered into a column or columns. 計算列の CHECK 制約も、PERSISTED とマークする必要があります。CHECK constraints on computed columns must also be marked PERSISTED.

logical_expression logical_expression
TRUE または FALSE を返す論理式です。Is a logical expression that returns TRUE or FALSE. 別名データ型を式に含めることはできません。Alias data types cannot be part of the expression.

column column
テーブル制約で使われる、かっこで囲まれた 1 つの列または列リストです。制約定義で使われている列を示します。Is a column or list of columns, in parentheses, used in table constraints to indicate the columns used in the constraint definition.

[ ASC | DESC ][ ASC | DESC ]
テーブル制約に参加している 1 つ以上の列が並べ替えられる順序を指定します。Specifies the order in which the column or columns participating in table constraints are sorted. 既定値は ASC です。The default is ASC.

partition_scheme_name partition_scheme_name
パーティション テーブルの各パーティションがマップされるファイル グループを定義するパーティション構成の名前です。Is the name of the partition scheme that defines the filegroups onto which the partitions of a partitioned table will be mapped. パーティション構成はデータベース内に存在している必要があります。The partition scheme must exist within the database.

[ partition_column_name .[ partition_column_name. ]]
パーティション テーブルに対して、パーティション分割する列を指定します。Specifies the column against which a partitioned table will be partitioned. ここで指定する列は、partition_scheme_name が使用しているパーティション関数で指定した列と、データ型、長さ、有効桁数が同じであることが必要です。The column must match that specified in the partition function that partition_scheme_name is using in terms of data type, length, and precision. パーティション関数に関与する計算列は、明示的に PERSISTED とマークされている必要があります。A computed columns that participates in a partition function must be explicitly marked PERSISTED.

重要

パーティション テーブルに加え、ALTER TABLE...SWITCH 操作のソースまたはターゲットとなっているパーティション分割されていないテーブルのパーティション分割列にも、NOT NULL を指定することをお勧めします。We recommend that you specify NOT NULL on the partitioning column of partitioned tables, and also nonpartitioned tables that are sources or targets of ALTER TABLE...SWITCH operations. こうすることで、パーティション分割列上のすべての CHECK 制約で null 値のチェックを行う必要がなくなります。Doing this makes sure that any CHECK constraints on partitioning columns do not have to check for null values.

WITH FILLFACTOR = fillfactor WITH FILLFACTOR =fillfactor
インデックス データの格納に使用される個々のインデックス ページをデータベース エンジンDatabase Engineがどの程度埋めるかを指定します。Specifies how full the データベース エンジンDatabase Engine should make each index page that is used to store the index data. ユーザーが指定できる fillfactor の値は、1 ~ 100 です。User-specified fillfactor values can be from 1 through 100. 値を指定しない場合の既定値は 0 です。If a value is not specified, the default is 0. FILL FACTOR 値 0 と 100 の機能は、まったく同じです。Fill factor values 0 and 100 are the same in all respects.

重要

マニュアルには、WITH FILLFACTOR = fillfactor が PRIMARY KEY 制約または UNIQUE 制約に適用される唯一のインデックス オプションとして記述されていますが、これは旧バージョンとの互換性を維持するために記載されており、将来のリリースではこのような記述はなくなります。Documenting WITH FILLFACTOR = fillfactor as the only index option that applies to PRIMARY KEY or UNIQUE constraints is maintained for backward compatibility, but will not be documented in this manner in future releases.

column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNScolumn_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
列セットの名前です。Is the name of the column set. 列セットは、型指定されていない XML 表記であり、テーブルのすべてのスパース列を 1 つにまとめて構造化した出力です。A column set is an untyped XML representation that combines all of the sparse columns of a table into a structured output. 列セットの詳細については、「 列セットの使用」を参照してください。For more information about column sets, see Use Column Sets.

PERIOD FOR SYSTEM_TIME (system_start_time_column_name , system_end_time_column_name )PERIOD FOR SYSTEM_TIME (system_start_time_column_name , system_end_time_column_name )
適用対象: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL Server 2017SQL Server 2017) と Azure SQL データベースAzure SQL DatabaseApplies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Azure SQL データベースAzure SQL Database.

レコードの有効期間を記録するためにシステムで使われる列の名前を指定します。Specifies the names of the columns that the system will use to record the period for which a record is valid. GENERATED ALWAYS AS ROW { START | END } および WITH SYSTEM_VERSIONING = ON 引数と組み合わせてこの引数を使い、テーブル上でシステムのバージョン管理を有効にします。Use this argument in conjunction with the GENERATED ALWAYS AS ROW { START | END } and WITH SYSTEM_VERSIONING = ON arguments to enable system versioning on a table. 詳細については、「 Temporal Tables」を参照してください。For more information, see Temporal Tables.

COMPRESSION_DELAYCOMPRESSION_DELAY
適用対象: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL Server 2017SQL Server 2017) と Azure SQL データベースAzure SQL DatabaseApplies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Azure SQL データベースAzure SQL Database.

メモリ最適化のために、行が変更されないままテーブル内に留まる必要のある最小時間 (分) を遅延によって指定します。その後、それは列ストア インデックスへの圧縮対象となります。For a memory-optimized, delay specifies the minimum number of minutes a row must remain in the table, unchanged, before it is eligible for compression into the columnstore index. SQL ServerSQL Server では、圧縮する特定の行がその最終更新時刻に従って選択されます。selects specific rows to compress according to their last update time. たとえば、行が 2 時間の期間に頻繁に変更されている場合は、SQL Server が行を圧縮する前に更新が確実に完了するように COMPRESSION_DELAY = 120 Minutes に設定できます。For example, if rows are changing frequently during a two-hour period of time, you could set COMPRESSION_DELAY = 120 Minutes to ensure updates are completed before SQL Server compresses the row.

ディスク ベースのテーブルの場合は、CLOSED 状態のデルタ行グループがそのデルタ行グループに留まる必要がある最低限の分数が遅延によって指定され、その時間が経過すると、SQL ServerSQL Server は行グループを、圧縮された行グループに圧縮できるようになります。For a disk-based table, delay specifies the minimum number of minutes a delta rowgroup in the CLOSED state must remain in the delta rowgroup before SQL ServerSQL Server can compress it into the compressed rowgroup. ディスク ベース テーブルでは個々の行において挿入時間と更新時間が追跡されないため、SQL ServerSQL Server は CLOSED 状態のデルタ行グループに遅延を適用します。Since disk-based tables don't track insert and update times on individual rows, SQL ServerSQL Server applies the delay to delta rowgroups in the CLOSED state.

既定値は、0 分です。The default is 0 minutes.

COMPRESSION_DELAY を使用する場合の推奨事項については、「列ストアを使用したリアルタイム運用分析の概要」を参照してくださいFor recommendations on when to use COMPRESSION_DELAY, please see Get started with Columnstore for real time operational analytics

< table_option> ::=< table_option> ::=
1 つ以上のテーブル オプションを指定します。Specifies one or more table options.

DATA_COMPRESSIONDATA_COMPRESSION
指定したテーブル、パーティション番号、またはパーティション範囲に、データ圧縮オプションを指定します。Specifies the data compression option for the specified table, partition number, or range of partitions. 次のオプションがあります。The options are as follows:

なしNONE
テーブルまたは指定したパーティションが圧縮されません。Table or specified partitions are not compressed.

ROWROW
行の圧縮を使用して、テーブルまたは指定したパーティションが圧縮されます。Table or specified partitions are compressed by using row compression.

PAGEPAGE
ページの圧縮を使用して、テーブルまたは指定したパーティションが圧縮されます。Table or specified partitions are compressed by using page compression.

COLUMNSTORECOLUMNSTORE

適用対象: SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL Server 2017SQL Server 2017 および Azure SQL データベースAzure SQL DatabaseApplies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL データベースAzure SQL Database.

非クラスター化列ストアとクラスター化列ストア インデックスの両方を含む列ストア インデックスにのみ適用されます。Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE では、最も高パフォーマンスの列ストア圧縮で圧縮することを指定します。COLUMNSTORE specifies to compress with the most performant columnstore compression. これは、一般的な選択です。This is the typical choice.

COLUMNSTORE_ARCHIVECOLUMNSTORE_ARCHIVE
適用対象: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL Server 2017SQL Server 2017) と Azure SQL データベースAzure SQL DatabaseApplies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Azure SQL データベースAzure SQL Database.

非クラスター化列ストアとクラスター化列ストア インデックスの両方を含む列ストア インデックスにのみ適用されます。Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE_ARCHIVE では、テーブルまたはパーティションをより小さなサイズにさらに圧縮します。COLUMNSTORE_ARCHIVE will further compress the table or partition to a smaller size. これは、アーカイブ用や、ストレージのサイズを減らす必要があり、かつ保存と取得に時間をかける余裕があるその他の状況で使用できます。This can be used for archival, or for other situations that require a smaller storage size and can afford more time for storage and retrieval.

詳細については、「 Data Compression」を参照してください。For more information, see Data Compression.

ON PARTITIONS ( { <partition_number_expression> | [ , ...n ] ) ON PARTITIONS ( { <partition_number_expression> | [ ,...n ] )
DATA_COMPRESSION 設定を適用するパーティションを指定します。Specifies the partitions to which the DATA_COMPRESSION setting applies. テーブルがパーティション分割されていない場合に ON PARTITIONS 引数を使用すると、エラーが発生します。If the table is not partitioned, the ON PARTITIONS argument will generate an error. ON PARTITIONS 句を指定しないと、パーティション テーブルのすべてのパーティションに対して DATA_COMPRESSION オプションが適用されます。If the ON PARTITIONS clause is not provided, the DATA_COMPRESSION option will apply to all partitions of a partitioned table.

partition_number_expression は以下の方法で指定できます。partition_number_expression can be specified in the following ways:

  • 1 つのパーティションのパーティション番号を提供します。たとえば、ON PARTITIONS (2) のようになります。Provide the partition number of a partition, for example: ON PARTITIONS (2)
  • コンマで区切った複数の個別のパーティションのパーティション番号を提供します。たとえば次のとおりです: ON PARTITIONS (1, 5)Provide the partition numbers for several individual partitions separated by commas, for example: ON PARTITIONS (1, 5)
  • 範囲と個別のパーティションの両方を提供します。たとえば次のとおりです: ON PARTITIONS (2, 4, 6 TO 8)Provide both ranges and individual partitions, for example: ON PARTITIONS (2, 4, 6 TO 8)

<range> はパーティション番号として、TO で区切って指定できます。たとえば、ON PARTITIONS (6 TO 8) のようになります。<range> can be specified as partition numbers separated by the word TO, for example: ON PARTITIONS (6 TO 8).

さまざまなパーティションにさまざまな種類のデータ圧縮を設定するには、DATA_COMPRESSION オプションを複数回指定します。例:To set different types of data compression for different partitions, specify the DATA_COMPRESSION option more than once, for example:

WITH
(
    DATA_COMPRESSION = NONE ON PARTITIONS (1),
    DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8),
    DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)
)

<index_option> ::=<index_option> ::=
1 つ以上のインデックス オプションを指定します。Specifies one or more index options. これらのオプションの詳細な説明については、CREATE INDEX に関するページをご覧ください。For a complete description of these options, see CREATE INDEX.

PAD_INDEX = { ON | OFF }PAD_INDEX = { ON | OFF }
ON の場合、FILLFACTOR で指定された空き領域の割合が、インデックスの中間レベル ページに適用されます。When ON, the percentage of free space specified by FILLFACTOR is applied to the intermediate level pages of the index. OFF の場合や、FILLFACTOR 値を指定しない場合、中間レベル ページは、中間ページの一連のキーを考慮しつつ、インデックスが持つことのできる最大サイズの行を少なくとも 1 つ格納できる領域を残して、ほぼ容量いっぱいに使用されます。When OFF or a FILLFACTOR value it not specified, the intermediate level pages are filled to near capacity leaving enough space for at least one row of the maximum size the index can have, considering the set of keys on the intermediate pages. 既定値は OFF です。The default is OFF.

FILLFACTOR = fillfactor FILLFACTOR =fillfactor
インデックスの作成時または変更時に、データベース エンジンDatabase Engine が各インデックス ページのリーフ レベルをどの程度まで埋めるかを、パーセント値で指定します。Specifies a percentage that indicates how full the データベース エンジンDatabase Engine should make the leaf level of each index page during index creation or alteration. fillfactor 値には、1 ~ 100 の整数値を指定してください。fillfactor must be an integer value from 1 to 100. 既定値は 0 です。The default is 0. FILL FACTOR 値 0 と 100 の機能は、まったく同じです。Fill factor values 0 and 100 are the same in all respects.

IGNORE_DUP_KEY = { ON | OFF }IGNORE_DUP_KEY = { ON | OFF }
挿入操作で、一意のインデックスに重複するキー値を挿入しようとした場合のエラー応答を指定します。Specifies the error response when an insert operation attempts to insert duplicate key values into a unique index. IGNORE_DUP_KEY オプションは、インデックスが作成または再構築された後の挿入操作のみに適用されます。The IGNORE_DUP_KEY option applies only to insert operations after the index is created or rebuilt. CREATE INDEXALTER INDEX、または UPDATE を実行した場合、このオプションは無効です。The option has no effect when executing CREATE INDEX, ALTER INDEX, or UPDATE. 既定値は OFF です。The default is OFF.

ONON
重複したキー値が一意のインデックスに挿入されると、警告メッセージが表示されます。A warning message will occur when duplicate key values are inserted into a unique index. 一意性制約に違反する行のみが失敗します。Only the rows violating the uniqueness constraint will fail.

OFFOFF
重複したキー値が一意のインデックスに挿入されると、エラー メッセージが表示されます。An error message will occur when duplicate key values are inserted into a unique index. INSERT 操作全体がロールバックされます。The entire INSERT operation will be rolled back.

ビューに作成されたインデックス、一意でないインデックス、XML インデックス、空間インデックス、およびフィルター処理されたインデックスについては、IGNORE_DUP_KEY を ON に設定することはできません。IGNORE_DUP_KEY cannot be set to ON for indexes created on a view, non-unique indexes, XML indexes, spatial indexes, and filtered indexes.

IGNORE_DUP_KEY を表示するには、sys.indexes を使用します。To view IGNORE_DUP_KEY, use sys.indexes.

下位互換性のある構文では、WITH IGNORE_DUP_KEYWITH IGNORE_DUP_KEY = ON と等価です。In backward compatible syntax, WITH IGNORE_DUP_KEY is equivalent to WITH IGNORE_DUP_KEY = ON.

STATISTICS_NORECOMPUTE = { ON | OFF }STATISTICS_NORECOMPUTE = { ON | OFF }
ON の場合、古いインデックス統計値は自動的には再計算されません。When ON, out-of-date index statistics are not automatically recomputed. OFF の場合、統計値の自動的な更新が有効になります。When OFF, automatic statistics updating are enabled. 既定値は OFF です。The default is OFF.

ALLOW_ROW_LOCKS = { ON | OFF }ALLOW_ROW_LOCKS = { ON | OFF }
ON の場合、インデックスにアクセスするときに行ロックが許可されます。When ON, row locks are allowed when you access the index. いつ行ロックを使用するかは、データベース エンジンDatabase Engineによって決定されます。The データベース エンジンDatabase Engine determines when row locks are used. OFF の場合、行のロックは使用されません。When OFF, row locks are not used. 既定値は ON です。The default is ON.

ALLOW_PAGE_LOCKS = { ON | OFF }ALLOW_PAGE_LOCKS = { ON | OFF }
ON の場合、インデックスにアクセスするときにページ ロックが許可されます。When ON, page locks are allowed when you access the index. いつページ ロックを使用するかは、データベース エンジンDatabase Engine によって決定されます。The データベース エンジンDatabase Engine determines when page locks are used. OFF の場合、ページ ロックは使用されません。When OFF, page locks are not used. 既定値は ON です。The default is ON.

FILETABLE_DIRECTORY = directory_nameFILETABLE_DIRECTORY = directory_name

適用対象: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) から SQL Server 2017SQL Server 2017 まで)。Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017).

Windows と互換性のある FileTable ディレクトリ名を指定します。Specifies the windows-compatible FileTable directory name. この名前は、データベース内のすべての FileTable ディレクトリ名の中で一意である必要があります。This name should be unique among all the FileTable directory names in the database. 一意性の比較では、照合順序の設定とは関係なく、大文字と小文字は区別されません。Uniqueness comparison is case-insensitive, regardless of collation settings. この値を指定しない場合、FileTable の名前が使用されます。If this value is not specified, the name of the filetable is used.

FILETABLE_COLLATE_FILENAME = { collation_name | database_default }FILETABLE_COLLATE_FILENAME = { collation_name | database_default }

適用対象: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) から SQL Server 2017SQL Server 2017 まで)。Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017). Azure SQL データベースAzure SQL Database では、FILETABLE はサポートされていません。does not support FILETABLE.

FileTable の Name 列に適用される照合順序の名前を指定します。Specifies the name of the collation to be applied to the Name column in the FileTable. 照合順序は、Windows のファイル名のセマンティクスに準拠するために、大文字と小文字を区別しない設定にする必要があります。The collation must be case-insensitive to comply with Windows file naming semantics. この値が指定されていない場合、データベースの既定の照合順序が使用されます。If this value is not specified, the database default collation is used. データベースの既定の照合順序で大文字と小文字が区別される場合は、エラーが発生し、CREATE TABLE 操作は失敗します。If the database default collation is case-sensitive, an error is raised and the CREATE TABLE operation fails.

collation_name collation_name
大文字と小文字を区別しない照合順序の名前です。The name of a case-insensitive collation.

database_defaultdatabase_default
データベースの既定の照合順序を使用するように指定します。Specifies that the default collation for the database should be used. この照合順序は、大文字と小文字を区別しないものである必要があります。This collation must be case-insensitive.

FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_name FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_name
適用対象: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) から SQL Server 2017SQL Server 2017 まで)。Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017).

FileTable に対して自動的に作成される主キー制約で使用する名前を指定します。Specifies the name to be used for the primary key constraint that is automatically created on the FileTable. この値を指定しない場合、システムによって制約の名前が生成されます。If this value is not specified, the system generates a name for the constraint.

FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_name FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_name
適用対象: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) から SQL Server 2017SQL Server 2017 まで)。Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017).

FileTable の stream_id 列に対して自動的に作成される一意制約で使用する名前を指定します。Specifies the name to be used for the unique constraint that is automatically created on the stream_id column in the FileTable. この値を指定しない場合、システムによって制約の名前が生成されます。If this value is not specified, the system generates a name for the constraint.

FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_name FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_name
適用対象: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) から SQL Server 2017SQL Server 2017 まで)。Applies to: SQL ServerSQL Server (SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017).

FileTable の parent_path_locator 列と name 列に対して自動的に作成される一意制約で使用する名前を指定します。Specifies the name to be used for the unique constraint that is automatically created on the parent_path_locator and name columns in the FileTable. この値を指定しない場合、システムによって制約の名前が生成されます。If this value is not specified, the system generates a name for the constraint.

SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name .history_table_name [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name .history_table_name [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]
適用対象: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL Server 2017SQL Server 2017Azure SQL データベースAzure SQL Database まで)。Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL データベースAzure SQL Database).

データ型、NULL 値の許容制約、および主キー制約の要件が満たされている場合は、テーブルのシステムのバージョン管理を有効にします。Enables system versioning of the table if the datatype, nullability constraint, and primary key constraint requirements are met. HISTORY_TABLE 引数を使用しない場合、システムは現在のテーブルと同じファイル グループ内の現在のテーブルのスキーマに一致する新しい履歴テーブルを生成し、これによって 2 つのテーブルの間にリンクが作成され、履歴テーブルに現在のテーブル内の各レコードの履歴が記録されるようになります。If the HISTORY_TABLE argument is not used, the system generates a new history table matching the schema of the current table in the same filegroup as the current table, creating a link between the two tables and enables the system to record the history of each record in the current table in the history table. この履歴テーブルの名前は MSSQL_TemporalHistoryFor<primary_table_object_id> になります。The name of this history table will be MSSQL_TemporalHistoryFor<primary_table_object_id>. 履歴テーブルには既定では、 PAGE 圧縮します。By default, the history table is PAGE compressed. HISTORY_TABLE 引数を使ってリンクを作成し、既存の履歴テーブルを使用する場合、現在のテーブルと指定したテーブルの間のリンクが作成されます。If the HISTORY_TABLE argument is used to create a link to and use an existing history table, the link is created between the current table and the specified table. 現在のテーブルがパーティション分割する場合、履歴テーブルは、パーティション分割構成がレプリケートされていないために自動的に現在のテーブルから履歴テーブルに既定のファイル グループに作成されます。If current table is partitioned, the history table is created on default file group because partitioning configuration is not replicated automatically from the current table to the history table. 履歴テーブルの作成時に履歴テーブルの名前を指定すると場合、は、スキーマとテーブルの名前を指定する必要があります。If the name of a history table is specified during history table creation, you must specify the schema and table name. 既存の履歴テーブルへのリンクを作成する場合は、データの整合性チェックを実行することもできます。When creating a link to an existing history table, you can choose to perform a data consistency check. このデータの整合性チェックでは、既存のレコードが重複しないことを確認します。This data consistency check ensures that existing records do not overlap. データを実行する一貫性チェックが、既定値です。Performing the data consistency check is the default. PERIOD FOR SYSTEM_TIME および GENERATED ALWAYS AS ROW { START | END } 引数と組み合わせてこの引数を使い、テーブル上でシステムのバージョン管理を有効にします。Use this argument in conjunction with the PERIOD FOR SYSTEM_TIME and GENERATED ALWAYS AS ROW { START | END } arguments to enable system versioning on a table. 詳細については、「 Temporal Tables」を参照してください。For more information, see Temporal Tables.

REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [,...n] ) ] | OFF ( MIGRATION_STATE = PAUSED ) }REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [,...n] ) ] | OFF ( MIGRATION_STATE = PAUSED ) }
適用対象: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL Server 2017SQL Server 2017 まで)。Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017).

Stretch Database が有効または無効になっている新しいテーブルを作成します。Creates the new table with Stretch Database enabled or disabled. 詳細については、「 Stretch Database」を参照してください。For more info, see Stretch Database.

テーブルに対して Stretch Database を有効にするEnabling Stretch Database for a table

ON を指定してテーブルに対して Stretch を有効にする場合は、必要に応じて、MIGRATION_STATE = OUTBOUND を指定してデータの移行をすぐに開始するか、MIGRATION_STATE = PAUSED を指定してデータの移行を延期することができます。When you enable Stretch for a table by specifying ON, you can optionally specify MIGRATION_STATE = OUTBOUND to begin migrating data immediately, or MIGRATION_STATE = PAUSED to postpone data migration. 既定値は MIGRATION_STATE = OUTBOUND です。The default value is MIGRATION_STATE = OUTBOUND. テーブルに対して Stretch を有効にする方法については、「データベースに対して Stretch Database を有効にする」を参照してください。For more info about enabling Stretch for a table, see Enable Stretch Database for a table.

前提条件Prerequisites. テーブルに対して Stretch を有効にする前に、サーバーおよびデータベースで Stretch を有効にする必要があります。Before you enable Stretch for a table, you have to enable Stretch on the server and on the database. 詳細については、「 Enable Stretch Database for a database」を参照してください。For more info, see Enable Stretch Database for a database.

権限:Permissions. データベースまたはテーブルの Stretch を有効にするには、db_owner アクセス許可が必要です。Enabling Stretch for a database or a table requires db_owner permissions. テーブルの Stretch を有効にする場合、テーブルに対する ALTER 権限も必要です。Enabling Stretch for a table also requires ALTER permissions on the table.

[ FILTER_PREDICATE = { null | predicate } ][ FILTER_PREDICATE = { null | predicate } ]
適用対象: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL Server 2017SQL Server 2017 まで)。Applies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017).

必要に応じて、履歴データと現在のデータの両方を含むテーブルから移行する行を選択するフィルター述語を指定します。Optionally specifies a filter predicate to select rows to migrate from a table that contains both historical and current data. この述語で決定論的インライン テーブル値関数を呼び出す必要があります。The predicate must call a deterministic inline table-valued function. 詳しくは、「Enable Stretch Database for a table」および「フィルター関数を使用して移行する行を選択する」をご覧ください。For more info, see Enable Stretch Database for a table and Select rows to migrate by using a filter function.

重要

指定したフィルター述語のパフォーマンスが低いと、データ移行のパフォーマンスも低くなります。If you provide a filter predicate that performs poorly, data migration also performs poorly. Stretch Database では、CROSS APPLY 演算子を使用してテーブルにフィルター述語を適用します。Stretch Database applies the filter predicate to the table by using the CROSS APPLY operator.

フィルター述語を指定しない場合、テーブル全体が移行されます。If you don't specify a filter predicate, the entire table is migrated.

フィルター述語を指定する場合は、MIGRATION_STATE も指定する必要があります。When you specify a filter predicate, you also have to specify MIGRATION_STATE.

MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }
適用対象: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL Server 2017SQL Server 2017) と Azure SQL データベースAzure SQL DatabaseApplies to: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017) and Azure SQL データベースAzure SQL Database.

  • SQL ServerSQL Server から Azure SQL データベースAzure SQL Database にデータを移行するには OUTBOUND を指定します。Specify OUTBOUND to migrate data from SQL ServerSQL Server to Azure SQL データベースAzure SQL Database.

  • Azure SQL データベースAzure SQL Database から SQL ServerSQL Server にテーブルのリモート データをコピーして戻し、テーブルに対する Stretch を無効にするには、INBOUND を指定します。Specify INBOUND to copy the remote data for the table from Azure SQL データベースAzure SQL Database back to SQL ServerSQL Server and to disable Stretch for the table. 詳細については、「 Stretch Database を無効にして、リモート データを戻す」を参照してください。For more info, see Disable Stretch Database and bring back remote data.

    この操作によりデータ転送コストが発生し、取り消すことはできません。This operation incurs data transfer costs, and it can't be canceled.

  • データの移行を一時停止または延期するには PAUSED を指定します。Specify PAUSED to pause or postpone data migration. 詳細については、データ移行の一時停止と再開 - Stretch Database に関するページをご覧ください。For more info, see Pause and resume data migration -Stretch Database.

MEMORY_OPTIMIZEDMEMORY_OPTIMIZED
適用対象: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) から SQL Server 2017SQL Server 2017Azure SQL データベースAzure SQL Database まで)。Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL データベースAzure SQL Database). Azure SQL データベースAzure SQL Database マネージド インスタンスでは、メモリ最適化テーブルはサポートされません。managed instance does not support memory optimized tables.

値が ON の場合は、テーブルがメモリ最適化されていることを示します。The value ON indicates that the table is memory optimized. メモリ最適化テーブルは、トランザクション処理のパフォーマンスの最適化に使用されるインメモリ OLTP 機能の一部です。Memory-optimized tables are part of the In-Memory OLTP feature, which is used to optimized the performance of transaction processing. インメモリ OLTP の使用を開始する方法については、「クイック スタート 1:Transact-SQL のパフォーマンスを向上させるインメモリ OLTP テクノロジ」を参照してください。To get started with In-Memory OLTP see Quick Start 1: In-Memory OLTP Technologies for Faster Transact-SQL Performance. メモリ最適化テーブルについて詳しくは、「メモリ最適化テーブル」をご覧ください。For more in-depth information about memory-optimized tables see Memory-Optimized Tables.

既定値の OFF は、テーブルがディスク ベースであることを示します。The default value OFF indicates that the table is disk-based.

DURABILITYDURABILITY
適用対象: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) から SQL Server 2017SQL Server 2017) と Azure SQL データベースAzure SQL DatabaseApplies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Azure SQL データベースAzure SQL Database.

SCHEMA_AND_DATA は、テーブルに持続性があり、変更がディスクに保存され、再起動またはフェールオーバー後も存続することを示します。The value of SCHEMA_AND_DATA indicates that the table is durable, meaning that changes are persisted on disk and survive restart or failover. SCHEMA_AND_DATA が既定値です。SCHEMA_AND_DATA is the default value.

SCHEMA_ONLY は、テーブルに持続性がないことを示します。The value of SCHEMA_ONLY indicates that the table is non-durable. データベースを再起動またはフェールオーバーした場合、テーブル スキーマは保存されますが、データの更新内容は保存されません。The table schema is persisted but any data updates are not persisted upon a restart or failover of the database. DURABILITY = SCHEMA_ONLYMEMORY_OPTIMIZED = ON でのみ使用することができます。DURABILITY = SCHEMA_ONLY is only allowed with MEMORY_OPTIMIZED = ON.

警告

DURABILITY = SCHEMA_ONLY でテーブルが作成される場合、READ_COMMITTED_SNAPSHOT がその後 ALTER DATABASE を使用して変更されると、テーブル内のデータは失われます。When a table is created with DURABILITY = SCHEMA_ONLY, and READ_COMMITTED_SNAPSHOT is subsequently changed using ALTER DATABASE, data in the table will be lost.

BUCKET_COUNTBUCKET_COUNT
適用対象: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) から SQL Server 2017SQL Server 2017Azure SQL データベースAzure SQL Database)。Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL データベースAzure SQL Database.

ハッシュ インデックスに作成されるバケットの数を示します。Indicates the number of buckets that should be created in the hash index. ハッシュ インデックスの BUCKET_COUNT の最大値は 1,073,741,824 です。The maximum value for BUCKET_COUNT in hash indexes is 1,073,741,824. バケット数について詳しくは、「メモリ最適化テーブルのインデックス」をご覧ください。For more information about bucket counts, see Indexes for Memory-Optimized Tables.

BUCKET_COUNT は必須の引数です。Bucket_count is a required argument.

INDEX 適用対象: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) から SQL Server 2017SQL Server 2017Azure SQL データベースAzure SQL Database)。INDEX Applies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Azure SQL データベースAzure SQL Database).

列インデックスとテーブル インデックスは、CREATE TABLE ステートメントの一部として指定できます。Column and table indexes can be specified as part of the CREATE TABLE statement. メモリ最適化テーブルのインデックスの追加と削除の詳細については、次のページを参照してください。メモリ最適化テーブルの変更For details about adding and removing indexes on memory-optimized tables see: Altering Memory-Optimized Tables

HASHHASH
適用対象: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) から SQL Server 2017SQL Server 2017) と Azure SQL データベースAzure SQL DatabaseApplies to: SQL ServerSQL Server (SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017) and Azure SQL データベースAzure SQL Database.

ハッシュ インデックスを作成することを示します。Indicates that a HASH index is created.

ハッシュ インデックスは、メモリ最適化テーブルでのみサポートされます。Hash indexes are supported only on memory-optimized tables.

RemarksRemarks

許容されるテーブル、列、制約、およびインデックスの数については、「SQL Server の最大容量仕様」を参照してください。For information about the number of allowed tables, columns, constraints and indexes, see Maximum Capacity Specifications for SQL Server.

一般的にテーブルとインデックスには、一度に 1 エクステントの増分で領域が割り当てられます。Space is generally allocated to tables and indexes in increments of one extent at a time. ALTER DATABASESET MIXED_PAGE_ALLOCATION オプションが TRUE に設定されている場合、または常に SQL Server 2016 (13.x)SQL Server 2016 (13.x) より前である場合は、テーブルまたはインデックスの作成時に、ページが単一エクステントを埋めるのに十分な量になるまで混合エクステントからページが割り当てられます。When the SET MIXED_PAGE_ALLOCATION option of ALTER DATABASE is set to TRUE, or always prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x), when a table or index is created, it is allocated pages from mixed extents until it has enough pages to fill a uniform extent. ページが単一エクステントを埋めるのに十分な量になった後は、現在割り当てられているエクステントが埋まるたびに新しいエクステントが割り当てられます。After it has enough pages to fill a uniform extent, another extent is allocated every time the currently allocated extents become full. テーブルに割り当てられて使用されている領域の大きさに関するレポートを表示するには、sp_spaceused を実行します。For a report about the amount of space allocated and used by a table, execute sp_spaceused.

データベース エンジンDatabase Engineでは、列定義の中で、DEFAULT、IDENTITY、ROWGUIDCOL または列制約を指定する順序は設定されていません。The データベース エンジンDatabase Engine does not enforce an order in which DEFAULT, IDENTITY, ROWGUIDCOL, or column constraints are specified in a column definition.

テーブルを作成するときに、QUOTED IDENTIFIER オプションが OFF に設定されている場合でも、ON としてテーブルのメタデータ内に格納されます。When a table is created, the QUOTED IDENTIFIER option is always stored as ON in the metadata for the table, even if the option is set to OFF when the table is created.

一時テーブルTemporary Tables

ローカルおよびグローバル一時テーブルを作成できます。You can create local and global temporary tables. ローカル一時テーブルは現在のセッション内でしか使えず、グローバル一時テーブルはすべてのセッションで使えます。Local temporary tables are visible only in the current session, and global temporary tables are visible to all sessions. 一時テーブルをパーティション分割することはできません。Temporary tables cannot be partitioned.

ローカル一時テーブル名の前には 1 つの番号記号 (#) を付加し (#table_name)、グローバル一時テーブル名の前には 2 つの番号記号を付加します (##table_name)。Prefix local temporary table names with single number sign (#table_name), and prefix global temporary table names with a double number sign (##table_name).

Transact-SQLTransact-SQL ステートメントは、CREATE TABLE ステートメントの table_name に指定された値を使用して、一時テーブルを参照します。以下に例を示します。statements reference the temporary table by using the value specified for table_name in the CREATE TABLE statement, for example:

CREATE TABLE #MyTempTable (
  col1 INT PRIMARY KEY
);

INSERT INTO #MyTempTable 
VALUES (1);

1 つのストアド プロシージャまたはバッチ内で複数の一時テーブルを作成する場合は、それぞれ違う名前で作成する必要があります。If more than one temporary table is created inside a single stored procedure or batch, they must have different names.

一時テーブルを作成またはアクセスするときに schema_name を含めると、無視されます。If you include a schema_name when you create or access a temporary table, it is ignored. すべての一時テーブルは、dbo スキーマで作成されます。All temporary tables are created in the dbo schema.

ローカル一時テーブルが、複数ユーザーが同時に実行できるストアド プロシージャまたはアプリケーションで作成される場合、データベース エンジンDatabase Engineは、異なるユーザーが作成する個々のテーブルを区別できなければなりません。If a local temporary table is created in a stored procedure or application that can be executed at the same time by several users, the データベース エンジンDatabase Engine must be able to distinguish the tables created by the different users. データベース エンジンDatabase Engineは、各ローカル一時テーブル名の末尾に数値サフィックスを内部的に追加することによって、テーブルを区別します。The データベース エンジンDatabase Engine does this by internally appending a numeric suffix to each local temporary table name. tempdbsysobjects テーブルに格納される一時テーブルのフル ネームは、CREATE TABLE ステートメントで指定されたテーブル名とシステムが生成する数値サフィックスから構成されます。The full name of a temporary table as stored in the sysobjects table in tempdb is made up of the table name specified in the CREATE TABLE statement and the system-generated numeric suffix. サフィックスを許可する table_name 指定は、ローカルの一時テーブル名は、116 文字を超えることはできません。To allow for the suffix, table_name specified for a local temporary name cannot exceed 116 characters.

一時テーブルは、DROP TABLE を使用して明示的に削除される場合を除き、有効範囲外になったときに自動的に削除されます。Temporary tables are automatically dropped when they go out of scope, unless explicitly dropped by using DROP TABLE:

  • ストアド プロシージャで作成されたローカル一時テーブルは、ストアド プロシージャが終了すると自動的に削除されます。A local temporary table created in a stored procedure is dropped automatically when the stored procedure is finished. テーブルは、そのテーブルを作成したストアド プロシージャによって実行される任意の入れ子になったストアド プロシージャから参照できます。The table can be referenced by any nested stored procedures executed by the stored procedure that created the table. テーブルを作成したストアド プロシージャの呼び出し元のプロセスから、そのテーブルを参照することはできません。The table cannot be referenced by the process that called the stored procedure that created the table.
  • その他すべてのローカル一時テーブルは、現在のセッションの終了時に自動的に削除されます。All other local temporary tables are dropped automatically at the end of the current session.
  • グローバル一時テーブルは、テーブルを作成したセッションが終了し、その他すべてのタスクがその参照をやめたときに、自動的に削除されます。Global temporary tables are automatically dropped when the session that created the table ends and all other tasks have stopped referencing them. タスクとテーブルの間の関連付けは、1 つの Transact-SQLTransact-SQL ステートメントが存続する間のみ維持されます。The association between a task and a table is maintained only for the life of a single Transact-SQLTransact-SQL statement. したがって、グローバル一時テーブルは、テーブルを作成したセッションが終了したときに、テーブルを能動的に参照していた最後の Transact-SQLTransact-SQL ステートメントが完了したときに削除されます。This means that a global temporary table is dropped at the completion of the last Transact-SQLTransact-SQL statement that was actively referencing the table when the creating session ended.

ストアド プロシージャまたはトリガーの内部で作成されたローカル一時テーブルは、ストアド プロシージャまたはトリガーが呼び出される前に作成された一時テーブルと同じ名前にすることができます。A local temporary table created within a stored procedure or trigger can have the same name as a temporary table that was created before the stored procedure or trigger is called. ただし、クエリが一時テーブルを参照し、かつ同じ名前の一時テーブルが同時に 2 つ存在する場合、クエリがどちらのテーブルに対して解決されるかは定義されません。However, if a query references a temporary table and two temporary tables with the same name exist at that time, it is not defined which table the query is resolved against. 入れ子になったストアド プロシージャも、そのプロシージャを呼び出したストアド プロシージャによって作成された一時テーブルと同じ名前を持つ一時テーブルを作成することができます。Nested stored procedures can also create temporary tables with the same name as a temporary table that was created by the stored procedure that called it. ただし、入れ子になったプロシージャで作成したテーブルへの解決を変更するためには、呼び出し元プロシージャで作成されたテーブルと同じ構造、同じ列名である必要があります。However, for modifications to resolve to the table that was created in the nested procedure, the table must have the same structure, with the same column names, as the table created in the calling procedure. 次の例を参照してください。This is shown in the following example.

CREATE PROCEDURE dbo.Test2
AS
    CREATE TABLE #t(x INT PRIMARY KEY);
    INSERT INTO #t VALUES (2);
    SELECT Test2Col = x FROM #t;
GO

CREATE PROCEDURE dbo.Test1
AS
    CREATE TABLE #t(x INT PRIMARY KEY);
    INSERT INTO #t VALUES (1);
    SELECT Test1Col = x FROM #t;
 EXEC Test2;
GO

CREATE TABLE #t(x INT PRIMARY KEY);
INSERT INTO #t VALUES (99);
GO

EXEC Test1;
GO

以下に結果セットを示します。Here is the result set.

(1 row(s) affected)
Test1Col
-----------
1

(1 row(s) affected)
 Test2Col
 -----------
 2

ローカルまたはグローバル一時テーブルを作成する場合、CREATE TABLE 構文では、FOREIGN KEY 制約を除く制約定義がサポートされています。When you create local or global temporary tables, the CREATE TABLE syntax supports constraint definitions except for FOREIGN KEY constraints. 一時テーブルで FOREIGN KEY 制約が指定されていると、ステートメントは、制約が省略されたことを示す警告メッセージを返します。If a FOREIGN KEY constraint is specified in a temporary table, the statement returns a warning message that states the constraint was skipped. テーブルは FOREIGN KEY 制約なしのままで作成されます。The table is still created without the FOREIGN KEY constraints. FOREIGN KEY 制約の中で一時テーブルを参照することはできません。Temporary tables cannot be referenced in FOREIGN KEY constraints.

名前付き制約のある一時テーブルがユーザー定義トランザクションのスコープ内で作成される場合、一時テーブルを作成するステートメントを実行できるのは、一度に 1 ユーザーだけです。If a temporary table is created with a named constraint and the temporary table is created within the scope of a user-defined transaction, only one user at a time can execute the statement that creates the temp table. たとえば、ストアド プロシージャで名前付き主キー制約のある一時テーブルが作成される場合、そのストアド プロシージャを複数のユーザーが同時に実行することはできません。For example, if a stored procedure creates a temporary table with a named primary key constraint, the stored procedure cannot be executed simultaneously by multiple users.

データベース スコープ グローバル一時テーブル (Azure SQL Database)Database scoped global temporary tables (Azure SQL Database)

SQL ServerSQL Server のグローバル一時テーブル (テーブル名が ## で始まる) は、tempdb に格納され、SQL ServerSQL Server インスタンス全体のすべてのユーザーのセッション間で共有されます。Global temporary tables for SQL ServerSQL Server (initiated with ## table name) are stored in tempdb and shared among all users' sessions across the whole SQL ServerSQL Server instance. SQL テーブル型については、前述のテーブルの作成に関するセクションをご覧ください。For information on SQL table types, see the above section on Create Tables.

Azure SQL データベースAzure SQL Database は、tempdb にも保存されてスコープがデータベース レベルに設定されるグローバル一時テーブルをサポートしています。supports global temporary tables that are also stored in tempdb and scoped to the database level. これは、グローバル一時テーブルが同じ Azure SQL データベースAzure SQL Database 内ですべてのユーザーのセッションで共有されることを意味します。This means that global temporary tables are shared for all users' sessions within the same Azure SQL データベースAzure SQL Database. 他のデータベースからのユーザー セッションは、グローバル一時テーブルにアクセスできません。User sessions from other databases cannot access global temporary tables.

Azure SQL データベースAzure SQL Database のグローバル一時テーブルは、SQL ServerSQL Server が一時テーブルに使用するのと同じ構文およびセマンティクスに従います。Global temporary tables for Azure SQL データベースAzure SQL Database follow the same syntax and semantics that SQL ServerSQL Server uses for temporary tables. 同様に、グローバル一時ストアド プロシージャも、スコープが Azure SQL データベースAzure SQL Database 内のデータベース レベルに設定されます。Similarly, global temporary stored procedures are also scoped to the database level in Azure SQL データベースAzure SQL Database. ローカル一時テーブル (テーブル名が # で始まる) も Azure SQL データベースAzure SQL Database でサポートされ、SQL ServerSQL Server で使用されるのと同じ構文およびセマンティクスに従います。Local temporary tables (initiated with # table name) are also supported for Azure SQL データベースAzure SQL Database and follow the same syntax and semantics that SQL ServerSQL Server uses. 一時テーブルに関する上のセクションをご覧ください。See the above section on Temporary Tables.

重要

この機能は、Azure SQL データベースAzure SQL Database で使用できます。This feature is available for Azure SQL データベースAzure SQL Database.

Azure SQL Database のグローバル一時テーブルのトラブルシューティングTroubleshooting global temporary tables for Azure SQL Database

tempdb のトラブルシューティングについては、「tempdb のディスク領域の不足に関するトラブルシューティング」をご覧ください。For the troubleshooting the tempdb, see Troubleshooting Insufficient Disk space in tempdb.

注意

Azure SQL データベースAzure SQL Database の DMV のトラブルシューティングにアクセスできるのは、サーバー管理者のみです。Only a server admin can access the troubleshooting DMVs in Azure SQL データベースAzure SQL Database.

アクセス許可Permissions

すべてのユーザーがグローバル一時オブジェクトを作成できます。Any user can create global temporary objects. ユーザーは追加の権限を付与されない限り、自分で作成したオブジェクトにしかアクセスできません。Users can only access their own objects, unless they receive additional permissions.

パーティション テーブルPartitioned tables

CREATE TABLE を使用してパーティション テーブルを作成するには、まず、テーブルをパーティション分割する方法を指定するパーティション関数を作成する必要があります。Before creating a partitioned table by using CREATE TABLE, you must first create a partition function to specify how the table becomes partitioned. パーティション関数は、CREATE PARTITION FUNCTION を使用して作成します。A partition function is created by using CREATE PARTITION FUNCTION. 次に、パーティション構成を作成する必要があります。パーティション構成では、パーティション関数が示すパーティションを保持するファイル グループを指定します。Second, you must create a partition scheme to specify the filegroups that will hold the partitions indicated by the partition function. パーティション構成は、CREATE PARTITION SCHEME を使用して作成します。A partition scheme is created by using CREATE PARTITION SCHEME. パーティション テーブルでは、PRIMARY KEY 制約または UNIQUE 制約を別のファイル グループに配置するよう指定できません。Placement of PRIMARY KEY or UNIQUE constraints to separate filegroups cannot be specified for partitioned tables. 詳細については、「 Partitioned Tables and Indexes」を参照してください。For more information, see Partitioned Tables and Indexes.

PRIMARY KEY 制約PRIMARY KEY Constraints

  • テーブルに含めることができる PRIMARY KEY 制約は 1 つだけです。A table can contain only one PRIMARY KEY constraint.

  • PRIMARY KEY 制約によって生成されたインデックスが含まれていても、テーブル上のインデックスの数を、非クラスター化インデックス 999 個、クラスター化インデックス 1 個より多くすることはできません。The index generated by a PRIMARY KEY constraint cannot cause the number of indexes on the table to exceed 999 nonclustered indexes and 1 clustered index.

  • PRIMARY KEY 制約に対して CLUSTERED または NONCLUSTERED が指定されていない場合、UNIQUE 制約に対してクラスター化インデックスが指定されていない場合は CLUSTERED が使用されます。If CLUSTERED or NONCLUSTERED is not specified for a PRIMARY KEY constraint, CLUSTERED is used if there are no clustered indexes specified for UNIQUE constraints.

  • PRIMARY KEY 制約中で定義する列はすべて、NOT NULL として定義する必要があります。All columns defined within a PRIMARY KEY constraint must be defined as NOT NULL. NULL 値を許容するかどうかを指定しない場合、PRIMARY KEY 制約の影響を受けるすべての列は NOT NULL に設定されます。If nullability is not specified, all columns participating in a PRIMARY KEY constraint have their nullability set to NOT NULL.

    注意

    メモリ最適化テーブルでは、null 許容型キー列が許可されます。For memory-optimized tables, the NULLable key column is allowed.

  • CLR ユーザー定義型の列に対して主キーを定義する場合は、型の実装でバイナリ順がサポートされている必要があります。If a primary key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. 詳細については、「 CLR ユーザー定義型」を参照してください。For more information, see CLR User-Defined Types.

UNIQUE 制約UNIQUE Constraints

  • UNIQUE 制約に対して CLUSTERED または NONCLUSTERED が指定されていない場合は、特に指定がない限り、NONCLUSTERED が使用されます。If CLUSTERED or NONCLUSTERED is not specified for a UNIQUE constraint, NONCLUSTERED is used by default.
  • 個々の UNIQUE 制約はインデックスを生成します。Each UNIQUE constraint generates an index. UNIQUE 制約の数が原因で、テーブル上のインデックスの数が、非クラスター化インデックス 999 個、クラスター化インデックス 1 個を超えることはありません。The number of UNIQUE constraints cannot cause the number of indexes on the table to exceed 999 nonclustered indexes and 1 clustered index.
  • CLR ユーザー定義型の列に対して一意の制約を定義する場合は、型の実装でバイナリまたは演算子ベースの順序をサポートする必要があります。If a unique constraint is defined on a CLR user-defined type column, the implementation of the type must support binary or operator-based ordering. 詳細については、「 CLR ユーザー定義型」を参照してください。For more information, see CLR User-Defined Types.

FOREIGN KEY 制約FOREIGN KEY Constraints

  • FOREIGN KEY 制約の列に NULL 以外の値を入力するときは、その値が参照される列に存在している必要があります。存在していないと外部キー違反のエラー メッセージが返されます。When a value other than NULL is entered into the column of a FOREIGN KEY constraint, the value must exist in the referenced column; otherwise, a foreign key violation error message is returned.

  • FOREIGN KEY 制約は、変換元列が指定されている場合を除き、前の列に適用されます。FOREIGN KEY constraints are applied to the preceding column, unless source columns are specified.

  • FOREIGN KEY 制約は、同じサーバー上の同じデータベース内のテーブルのみを参照できます。FOREIGN KEY constraints can reference only tables within the same database on the same server. 複数のデータベースにまたがる参照整合性は、トリガーを使って実装する必要があります。Cross-database referential integrity must be implemented through triggers. 詳細については、CREATE TRIGGER に関するページをご覧ください。For more information, see CREATE TRIGGER.

  • FOREIGN KEY 制約は、同じテーブル内の他の列を参照できます。FOREIGN KEY constraints can reference another column in the same table. これは、自己参照と呼ばれます。This is referred to as a self-reference.

  • 列レベルの FOREIGN KEY 制約の REFERENCES 句は、参照列を 1 つだけ表示できます。The REFERENCES clause of a column-level FOREIGN KEY constraint can list only one reference column. この参照列は、制約が定義されている列と同じデータ型である必要があります。This column must have the same data type as the column on which the constraint is defined.

  • テーブルレベルの FOREIGN KEY 制約の REFERENCES 句は、制約列リスト内の列の数と同じ数の参照列を持っている必要があります。The REFERENCES clause of a table-level FOREIGN KEY constraint must have the same number of reference columns as the number of columns in the constraint column list. また、各参照列のデータ型は、列リスト内の、参照列に対応する列と同じでなければなりません。The data type of each reference column must also be the same as the corresponding column in the column list.

  • timestamp 型の列が外部キーまたは参照されるキーの一部である場合、CASCADE、SET NULL、または SET DEFAULT を指定することはできません。CASCADE, SET NULL or SET DEFAULT cannot be specified if a column of type timestamp is part of either the foreign key or the referenced key.

  • CASCADE、SET NULL、SET DEFAULT および NO ACTION は、互いに参照関係にあるテーブルに対して組み合わせて使用することができます。CASCADE, SET NULL, SET DEFAULT and NO ACTION can be combined on tables that have referential relationships with each other. データベース エンジンDatabase Engine が NO ACTION を検出すると、関連する CASCADE、SET NULL および SET DEFAULT 操作が停止されロールバックされます。If the データベース エンジンDatabase Engine encounters NO ACTION, it stops and rolls back related CASCADE, SET NULL and SET DEFAULT actions. DELETE ステートメントの実行によって、CASCADE、SET NULL、SET DEFAULT および NO ACTION 操作の組み合わせが適用される場合、 データベース エンジンDatabase Engine が NO ACTION があるかどうかを調べる前にすべての CASCADE、SET NULL および SET DEFAULT 操作が適用されます。When a DELETE statement causes a combination of CASCADE, SET NULL, SET DEFAULT and NO ACTION actions, all the CASCADE, SET NULL and SET DEFAULT actions are applied before the データベース エンジンDatabase Engine checks for any NO ACTION.

  • データベース エンジンDatabase Engine には、他のテーブルを参照するテーブルに含めることができる FOREIGN KEY 制約の数についても、特定のテーブルを参照する他のテーブルが持つ FOREIGN KEY 制約の数についても、事前定義済みの制限はありません。The データベース エンジンDatabase Engine does not have a predefined limit on either the number of FOREIGN KEY constraints a table can contain that reference other tables, or the number of FOREIGN KEY constraints that are owned by other tables that reference a specific table.

    ただし、使用できる FOREIGN KEY 制約の実際の数は、ハードウェア構成やデータベースおよびアプリケーションのデザインにより制限されます。Nevertheless, the actual number of FOREIGN KEY constraints that can be used is limited by the hardware configuration and by the design of the database and application. 1 つのテーブルに含める FOREIGN KEY 制約は 253 個までとし、253 個以内の FOREIGN KEY 制約から参照することをお勧めします。We recommend that a table contain no more than 253 FOREIGN KEY constraints, and that it be referenced by no more than 253 FOREIGN KEY constraints. 効率的な制限は、アプリケーションとハードウェアにある程度依存します。The effective limit for you may be more or less depending on the application and hardware. ご自分のデータベースやアプリケーションを設計するときは、FOREIGN KEY 制約を適用することのコストを検討します。Consider the cost of enforcing FOREIGN KEY constraints when you design your database and applications.

  • FOREIGN KEY 制約は一時テーブルには設定されません。FOREIGN KEY constraints are not enforced on temporary tables.

  • FOREIGN KEY 制約は、参照されているテーブルの PRIMARY KEY 制約または UNIQUE 制約の中の列だけを参照できます。FOREIGN KEY constraints can reference only columns in PRIMARY KEY or UNIQUE constraints in the referenced table or in a UNIQUE INDEX on the referenced table.

  • CLR ユーザー定義型の列に対して外部キーを定義する場合は、型の実装でバイナリ順がサポートされている必要があります。If a foreign key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. 詳細については、「 CLR ユーザー定義型」を参照してください。For more information, see CLR User-Defined Types.

  • 外部キー リレーションシップに参加する列は、同じ長さと小数点以下桁数で定義する必要があります。Columns participating in a foreign key relationship must be defined with the same length and scale.

DEFAULT 定義DEFAULT definitions

  • 1 つの列は DEFAULT 定義を 1 つだけ持つことができます。A column can have only one DEFAULT definition.

  • DEFAULT 定義には、定数値、関数、SQL 標準ニラディック関数、または NULL を含めることができます。A DEFAULT definition can contain constant values, functions, SQL standard niladic functions, or NULL. 次の表は、ニラディック関数と、それらが INSERT ステートメントの実行中に既定値として返す値を示しています。The following table shows the niladic functions and the values they return for the default during an INSERT statement.

    SQL-92 ニラディック関数SQL-92 niladic function 返される値Value returned
    CURRENT_TIMESTAMPCURRENT_TIMESTAMP 現在の日付と時刻です。Current date and time.
    CURRENT_USERCURRENT_USER 挿入を実行しているユーザーの名前です。Name of user performing an insert.
    SESSION_USERSESSION_USER 挿入を実行しているユーザーの名前です。Name of user performing an insert.
    SYSTEM_USERSYSTEM_USER 挿入を実行しているユーザーの名前です。Name of user performing an insert.
    UserUSER 挿入を実行しているユーザーの名前です。Name of user performing an insert.
  • DEFAULT 定義内の constant_expression は、テーブル内の他の列、または、他のテーブル、ビュー、あるいはストアド プロシージャを参照できません。constant_expression in a DEFAULT definition cannot refer to another column in the table, or to other tables, views, or stored procedures.

  • timestamp データ型を持つ列や IDENTITY プロパティを持つ列に DEFAULT 定義を作成することはできません。DEFAULT definitions cannot be created on columns with a timestamp data type or columns with an IDENTITY property.

  • 別名データ型が既定のオブジェクトにバインドされている場合、別名データ型を持つ列に DEFAULT 定義を作成することはできません。DEFAULT definitions cannot be created for columns with alias data types if the alias data type is bound to a default object.

CHECK 制約CHECK Constraints

  • 列は CHECK 制約をいくつでも持つことが可能です。また、条件には AND と OR を使って結合した複数の論理式を含めることができます。A column can have any number of CHECK constraints, and the condition can include multiple logical expressions combined with AND and OR. 列に対する複数の CHECK 制約は、それらが作成された順に検証されます。Multiple CHECK constraints for a column are validated in the order they are created.

  • 検索条件はブール式によって評価する必要があり、他のテーブルを参照することはできません。The search condition must evaluate to a Boolean expression and cannot reference another table.

  • 列レベルの CHECK 制約は、制約された列のみを参照でき、テーブルレベルの CHECK 制約は、同じテーブル内の列のみを参照できます。A column-level CHECK constraint can reference only the constrained column, and a table-level CHECK constraint can reference only columns in the same table.

    CHECK CONSTRAINTS とルールは、INSERT ステートメントと UPDATE ステートメントの実行中のデータの検証という同じ役割を果たします。CHECK CONSTRAINTS and rules serve the same function of validating the data during INSERT and UPDATE statements.

  • 列に対して 1 つのルールおよび複数の CHECK 制約がある場合、すべての制限が評価されます。When a rule and one or more CHECK constraints exist for a column or columns, all restrictions are evaluated.

  • text 列、ntext 列、image 列に対しては CHECK 制約を定義できません。CHECK constraints cannot be defined on text, ntext, or image columns.

制約に関する追加情報Additional Constraint information

  • 制約に対して作成されたインデックスは、DROP INDEX でドロップすることはできません。ALTER TABLE を使用して制約をドロップする必要があります。An index created for a constraint cannot be dropped by using DROP INDEX; the constraint must be dropped by using ALTER TABLE. 制約に対して作成され、制約によって使用されるインデックスは、ALTER INDEX ... REBUILD を使用して再構築できます。An index created for and used by a constraint can be rebuilt by using ALTER INDEX ... REBUILD. 詳細については、「 インデックスの再編成と再構築」を参照してください。For more information, see Reorganize and Rebuild Indexes.
  • 制約名は識別子の規則に従う必要があります。ただし、番号記号 (#) で始めることはできません。Constraint names must follow the rules for identifiers, except that the name cannot start with a number sign (#). constraint_name を指定しない場合、この制約にはシステムによって生成された名前が割り当てられます。If constraint_name is not supplied, a system-generated name is assigned to the constraint. 制約の違反に関するすべてのエラー メッセージには、制約名が表示されます。The constraint name appears in any error message about constraint violations.
  • INSERT ステートメント、UPDATE ステートメントまたは DELETE ステートメントで制約の違反があった場合は、ステートメントが終了します。When a constraint is violated in an INSERT, UPDATE, or DELETE statement, the statement is ended. ただし、SET XACT_ABORT が OFF に設定されている場合は、トランザクション (ステートメントが明示的なトランザクションの一部である場合) の処理は続行されます。However, when SET XACT_ABORT is set to OFF, the transaction, if the statement is part of an explicit transaction, continues to be processed. SET XACT_ABORT が ON に設定されている場合は、トランザクション全体がロールバックされます。When SET XACT_ABORT is set to ON, the whole transaction is rolled back. @@ERROR システム関数を調べることにより、トランザクション定義付きの ROLLBACK TRANSACTION ステートメントを使用することもできます。You can also use the ROLLBACK TRANSACTION statement with the transaction definition by checking the @@ERROR system function.
  • ALLOW_ROW_LOCKS = ONALLOW_PAGE_LOCK = ON の場合、インデックスにアクセスするとき、行レベル、ページ レベル、テーブル レベルのロックが許可されます。When ALLOW_ROW_LOCKS = ON and ALLOW_PAGE_LOCK = ON, row-, page-, and table-level locks are allowed when you access the index. データベース エンジンDatabase Engineは適切なロックを選択し、行ロックまたはページ ロックをテーブル ロックにエスカレートすることができます。The データベース エンジンDatabase Engine chooses the appropriate lock and can escalate the lock from a row or page lock to a table lock. ALLOW_ROW_LOCKS = OFFALLOW_PAGE_LOCK = OFF の場合、インデックスにアクセスするとき、テーブル レベルのロックのみが許可されます。When ALLOW_ROW_LOCKS = OFF and ALLOW_PAGE_LOCK = OFF, only a table-level lock is allowed when you access the index.
  • テーブルが FOREIGN KEY または CHECK CONSTRAINTS とトリガーを持っている場合、制約条件は、トリガーが実行される前に評価されます。If a table has FOREIGN KEY or CHECK CONSTRAINTS and triggers, the constraint conditions are evaluated before the trigger is executed.

テーブルとテーブルの列に関するレポートを表示するには、sp_help または sp_helpconstraint を使用します。For a report on a table and its columns, use sp_help or sp_helpconstraint. テーブル名を変更するには、sp_rename を使用します。To rename a table, use sp_rename. テーブルに依存するビューとストアド プロシージャに関するレポートを表示するには、sys.dm_sql_referenced_entities および sys.dm_sql_referencing_entities を使用します。For a report on the views and stored procedures that depend on a table, use sys.dm_sql_referenced_entities and sys.dm_sql_referencing_entities.

テーブル定義内での NULL 値許容の規則Nullability rules within a table definition

列の NULL 値の許容により、その列でその列内のデータとして null 値 (NULL) が許可されるかどうかが決定されます。The nullability of a column determines whether that column can allow a null value (NULL) as the data in that column. NULL は 0 でも空白でもありません。NULL は、何も入力されなかった、または明示的な NULL が設定されたことを意味し、通常、値が未知である、または使用できないことを示します。NULL is not zero or blank: NULL means no entry was made or an explicit NULL was supplied, and it typically implies that the value is either unknown or not applicable.

CREATE TABLE または ALTER TABLE を使用してテーブルを作成または変更すると、データベースとセッションの設定は、列定義で使われているデータ型に NULL 値を許すかどうかの設定に影響を及ぼし、場合によっては、NULL 値を許すかどうかの設定をオーバーライドします。When you use CREATE TABLE or ALTER TABLE to create or alter a table, database and session settings influence and possibly override the nullability of the data type that is used in a column definition. 計算列でない場合は、常に明示的に NULL または NOT NULL として列を定義することをお勧めします。または、ユーザー定義データ型を使用する場合は、データ型の規定の NULL 値の許容を列が使用できるようにすることをお勧めします。We recommend that you always explicitly define a column as NULL or NOT NULL for noncomputed columns or, if you use a user-defined data type, that you allow the column to use the default nullability of the data type. スパース列では常に NULL を許容する必要があります。Sparse columns must always allow NULL.

列の NULL 値の許容を明示的に指定しない場合、列の NULL 値の許容は次の表に示す規則に従います。When column nullability is not explicitly specified, column nullability follows the rules shown in the following table.

[列データ型]Column data type RuleRule
別名データ型Alias data type データベース エンジンDatabase Engineは、データ型が作成されたときに指定された NULL 値を許容するかどうかの設定を使用します。The データベース エンジンDatabase Engine uses the nullability that is specified when the data type was created. データ型に NULL 値を許容するかどうかの既定の設定を調べるには、sp_help を使用します。To determine the default nullability of the data type, use sp_help.
CLR ユーザー定義型 (CLR user-defined type)CLR user-defined type NULL 値を許容するかどうかは列の定義によって決まります。Nullability is determined according to the column definition.
システムから提供されているデータ型System-supplied data type システムから提供されているデータ型にオプションが 1 つしかない場合は、それが優先されます。If the system-supplied data type has only one option, it takes precedence. timestamp データ型は NOT NULL である必要があります。timestamp data types must be NOT NULL. いずれかのセッション設定が SET を使って ON に設定されている場合:When any session settings are set ON by using SET:
ANSI_NULL_DFLT_ON が ON になっていれば、NULL が割り当てられます。ANSI_NULL_DFLT_ON = ON, NULL is assigned.
ANSI_NULL_DFLT_OFF が ON になっていれば、NOT NULL が割り当てられます。ANSI_NULL_DFLT_OFF = ON, NOT NULL is assigned.

いずれかのデータベース設定が ALTER DATABASE を使って構成されている場合:When any database settings are configured by using ALTER DATABASE:
ANSI_NULL_DEFAULT_ON が ON になっていれば、NULL が割り当てられます。ANSI_NULL_DEFAULT_ON = ON, NULL is assigned.
ANSI_NULL_DEFAULT_OFF が ON になっていれば、NOT NULL が割り当てられます。ANSI_NULL_DEFAULT_OFF = ON, NOT NULL is assigned.

ANSI_NULL_DEFAULT のデータベース設定を表示するには、カタログ ビュー sys.databases を使用しますTo view the database setting for ANSI_NULL_DEFAULT, use the sys.databases catalog view

どちらの ANSI_NULL_DFLT オプションもセッションに設定されていない状態で、データベースが既定値 (ANSI_NULL_DEFAULT が OFF) に設定されていると、既定値である NOT NULL が割り当てられます。When neither of the ANSI_NULL_DFLT options is set for the session and the database is set to the default (ANSI_NULL_DEFAULT is OFF), the default of NOT NULL is assigned.

列が計算列の場合、その列に NULL 値を許容するかどうかは、常にデータベース エンジンDatabase Engineによって自動的に決定されます。If the column is a computed column, its nullability is always automatically determined by the データベース エンジンDatabase Engine. このような列が NULL 値を許容するかどうかを確認するには、COLUMNPROPERTY 関数で AllowsNull プロパティを使用します。To find out the nullability of this type of column, use the COLUMNPROPERTY function with the AllowsNull property.

注意

SQL Server ODBC ドライバーでも SQL Server OLE DB ドライバーでも、特に指定のない限り ANSI_NULL_DFLT_ON が ON に設定されます。The SQL Server ODBC driver and SQL Server OLE DB driver both default to having ANSI_NULL_DFLT_ON set to ON. ODBC と OLE DB ユーザーは、ODBC データ ソースで、またはアプリケーションで設定される接続の属性またはプロパティを使って、これを構成することができます。ODBC and OLE DB users can configure this in ODBC data sources, or with connection attributes or properties set by the application.

Data CompressionData Compression

システム テーブルで圧縮を有効にすることはできません。System tables cannot be enabled for compression. テーブルを作成しているとき、特に指定しない限り、データ圧縮は NONE に設定されます。When you are creating a table, data compression is set to NONE, unless specified otherwise. 範囲外の一連のパーティションまたは単独のパーティションを指定すると、エラーが生成されます。If you specify a list of partitions or a partition that is out of range, an error will be generated. データ圧縮の詳細については、「 データの圧縮」を参照してください。For a more information about data compression, see Data Compression.

圧縮状態の変更による、テーブル、インデックス、またはパーティションへの影響を評価するには、 sp_estimate_data_compression_savings ストアド プロシージャを使用します。To evaluate how changing the compression state will affect a table, an index, or a partition, use the sp_estimate_data_compression_savings stored procedure.

アクセス許可Permissions

データベースの CREATE TABLE 権限と、テーブルを作成するスキーマの ALTER 権限が必要です。Requires CREATE TABLE permission in the database and ALTER permission on the schema in which the table is being created.

CREATE TABLE ステートメント内の列をユーザー定義型として定義する場合は、そのユーザー定義型に対する REFERENCES 権限が必要です。If any columns in the CREATE TABLE statement are defined to be of a user-defined type, REFERENCES permission on the user-defined type is required.

CREATE TABLE ステートメント内の列を CLR ユーザー定義型として定義する場合は、その型の所有権か、その型に対する REFERENCES 権限が必要です。If any columns in the CREATE TABLE statement are defined to be of a CLR user-defined type, either ownership of the type or REFERENCES permission on it is required.

CREATE TABLE ステートメント内の列に XML スキーマ コレクションが関連付けられている場合は、その XML スキーマ コレクションの所有権か、そのスキーマ コレクションに対する REFERENCES 権限が必要です。If any columns in the CREATE TABLE statement have an XML schema collection associated with them, either ownership of the XML schema collection or REFERENCES permission on it is required.

すべてのユーザーが tempdb 内に一時テーブルを作成できます。Any user can create temporary tables in tempdb.

使用例Examples

A.A. 列に PRIMARY KEY 制約を作成するCreate a PRIMARY KEY constraint on a column

次の例では、Employee テーブルの EmployeeID 列にクラスター化インデックスを持つ PRIMARY KEY 制約の列定義を示しています。The following example shows the column definition for a PRIMARY KEY constraint with a clustered index on the EmployeeID column of the Employee table. 制約名を指定していないため、制約名はシステムによって提供されます。Because a constraint name is not specified, the system supplies the constraint name.

CREATE TABLE dbo.Employee (EmployeeID int
PRIMARY KEY CLUSTERED);

B.B. FOREIGN KEY 制約の使用Using FOREIGN KEY constraints

FOREIGN KEY 制約は、他のテーブルを参照するために使用します。A FOREIGN KEY constraint is used to reference another table. 外部キーは単一列キーの場合も複数列キーの場合もあります。Foreign keys can be single-column keys or multicolumn keys. 次の例では、SalesPerson テーブルを参照する SalesOrderHeader テーブルに対する単一列 FOREIGN KEY 制約を示しています。This following example shows a single-column FOREIGN KEY constraint on the SalesOrderHeader table that references the SalesPerson table. 単一列 FOREIGN KEY 制約では、REFERENCES 句のみが必要とされます。Only the REFERENCES clause is required for a single-column FOREIGN KEY constraint.

SalesPersonID int NULL
REFERENCES SalesPerson(SalesPersonID)

FOREIGN KEY 句を明示的に使用して、列属性を書き換えることもできます。You can also explicitly use the FOREIGN KEY clause and restate the column attribute. 列名が両方のテーブルで同じである必要はないことに注意してください。Note that the column name does not have to be the same in both tables.

FOREIGN KEY (SalesPersonID) REFERENCES SalesPerson(SalesPersonID)

複数列キー制約はテーブル制約として作成されます。Multicolumn key constraints are created as table constraints. AdventureWorks2012AdventureWorks2012 データベース内の SpecialOfferProduct テーブルには、複数列 PRIMARY KEY が含まれています。In the AdventureWorks2012AdventureWorks2012 database, the SpecialOfferProduct table includes a multicolumn PRIMARY KEY. 次の例は、このキーを他のテーブルから参照する方法を示しています。明示的な制約名は省略可能です。The following example shows how to reference this key from another table; an explicit constraint name is optional.

CONSTRAINT FK_SpecialOfferProduct_SalesOrderDetail FOREIGN KEY
 (ProductID, SpecialOfferID)
REFERENCES SpecialOfferProduct (ProductID, SpecialOfferID)

C.C. UNIQUE 制約の使用Using UNIQUE constraints

UNIQUE 制約は、非主キー列に一意性を設定するために使用します。UNIQUE constraints are used to enforce uniqueness on nonprimary key columns. 次の例では、Name テーブルの Product 列が一意でなくてはならないという制限を課しています。The following example enforces a restriction that the Name column of the Product table must be unique.

Name nvarchar(100) NOT NULL
UNIQUE NONCLUSTERED

D.D. DEFAULT 定義の使用Using DEFAULT definitions

既定値により、値が指定されない場合に (INSERT および UPDATE ステートメントで) 値が指定されます。Defaults supply a value (with the INSERT and UPDATE statements) when no value is supplied. たとえば、AdventureWorks2012AdventureWorks2012 データベースは、会社内で従業員が行うさまざまな職務を列挙する参照テーブルを含むことができます。For example, the AdventureWorks2012AdventureWorks2012 database could include a lookup table listing the different jobs employees can fill in the company. 各職務について説明する列では、文字列の規定値によって、実際の説明が明示的に入力されなかったときの説明を指定できます。Under a column that describes each job, a character string default could supply a description when an actual description is not entered explicitly.

DEFAULT 'New Position - title not formalized yet'

DEFAULT 定義には、定数だけでなく関数を含めることができます。In addition to constants, DEFAULT definitions can include functions. エントリの現在の日付を取得するには、次の例を使います。Use the following example to get the current date for an entry.

DEFAULT (getdate())

ニラディック関数のスキャンによってデータ整合性を向上させることもできます。A niladic-function scan can also improve data integrity. 行を挿入したユーザーを追跡するには、USER 用ニラディック関数を使用します。To keep track of the user that inserted a row, use the niladic-function for USER. ニラディック関数をかっこで囲まないでください。Do not enclose the niladic-functions with parentheses.

DEFAULT USER

E.E. CHECK 制約を使用するUsing CHECK constraints

次の例は、Vendor テーブルの CreditRating 列に入力する値に対する制限を示しています。The following example shows a restriction made to values that are entered into the CreditRating column of the Vendor table. 制約には名前がありません。The constraint is unnamed.

CHECK (CreditRating >= 1 and CreditRating <= 5)

この例は、テーブルの列に入力される文字データのパターンを制限する名前付き制約を示しています。This example shows a named constraint with a pattern restriction on the character data entered into a column of a table.

CONSTRAINT CK_emp_id CHECK (emp_id LIKE
'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]'
OR emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]')

この例では、値が特定のリスト内にあるか、指定したパターンに従う必要があることを指定しています。This example specifies that the values must be within a specific list or follow a specified pattern.

CHECK (emp_id IN ('1389', '0736', '0877', '1622', '1756')
OR emp_id LIKE '99[0-9][0-9]')

F.F. 完全なテーブル定義の表示Showing the complete table definition

次の例は、AdventureWorks2012AdventureWorks2012 データベース内に作成された PurchaseOrderDetail テーブルの完全なテーブル定義とすべての制約定義を示します。The following example shows the complete table definitions with all constraint definitions for table PurchaseOrderDetail created in the AdventureWorks2012AdventureWorks2012 database. 例を実行するときには、テーブル スキーマを dbo に変更することに注意してください。Note that to run the sample, the table schema is changed to dbo.

CREATE TABLE dbo.PurchaseOrderDetail
(
    PurchaseOrderID int NOT NULL
        REFERENCES Purchasing.PurchaseOrderHeader(PurchaseOrderID),
    LineNumber smallint NOT NULL,
    ProductID int NULL
        REFERENCES Production.Product(ProductID),
    UnitPrice money NULL,
    OrderQty smallint NULL,
    ReceivedQty float NULL,
    RejectedQty float NULL,
    DueDate datetime NULL,
    rowguid uniqueidentifier ROWGUIDCOL NOT NULL
        CONSTRAINT DF_PurchaseOrderDetail_rowguid DEFAULT (newid()),
    ModifiedDate datetime NOT NULL
        CONSTRAINT DF_PurchaseOrderDetail_ModifiedDate DEFAULT (getdate()),
    LineTotal AS ((UnitPrice*OrderQty)),
    StockedQty AS ((ReceivedQty-RejectedQty)),
    CONSTRAINT PK_PurchaseOrderDetail_PurchaseOrderID_LineNumber
               PRIMARY KEY CLUSTERED (PurchaseOrderID, LineNumber)
               WITH (IGNORE_DUP_KEY = OFF)
)
ON PRIMARY;

G.G. XML スキーマ コレクションに型指定された xml 列を含むテーブルの作成Creating a table with an xml column typed to an XML schema collection

次の例では、XML スキーマ コレクション xml 型の HRResumeSchemaCollection 列を持つテーブルを作成します。The following example creates a table with an xml column that is typed to XML schema collection HRResumeSchemaCollection. DOCUMENT キーワードは、column_name 内の xml データ型の各インスタンスに、トップレベル要素を 1 つだけ含むことができるように指定します。The DOCUMENT keyword specifies that each instance of the xml data type in column_name can contain only one top-level element.

CREATE TABLE HumanResources.EmployeeResumes
   (LName nvarchar(25), FName nvarchar(25),
    Resume xml( DOCUMENT HumanResources.HRResumeSchemaCollection) );

H.H. パーティション テーブルの作成Creating a partitioned table

次の例では、テーブルまたはインデックスを 4 つのパーティションに分割するパーティション関数を作成します。The following example creates a partition function to partition a table or index into four partitions. 次に、例では、4 つのパーティションをそれぞれ保持するファイル グループを指定するパーティション構成を作成します。Then, the example creates a partition scheme that specifies the filegroups in which to hold each of the four partitions. 最後に、そのパーティション構成を使用するテーブルを作成します。Finally, the example creates a table that uses the partition scheme. この例では、ファイル グループが既にデータベースに存在していると仮定しています。This example assumes the filegroups already exist in the database.

CREATE PARTITION FUNCTION myRangePF1 (int)
    AS RANGE LEFT FOR VALUES (1, 100, 1000) ;
GO

CREATE PARTITION SCHEME myRangePS1
    AS PARTITION myRangePF1
    TO (test1fg, test2fg, test3fg, test4fg) ;
GO  
  
CREATE TABLE PartitionTable (col1 int, col2 char(10))
    ON myRangePS1 (col1) ;
GO

PartitionTable の列 col1 の値に基づき、各パーティションは次のように割り当てられます。Based on the values of column col1 of PartitionTable, the partitions are assigned in the following ways.

[ファイル グループ]Filegroup test1fgtest1fg test2fgtest2fg test3fgtest3fg test4fgtest4fg
パーティションPartition 11 22 33 44
Values col 1 <= 1col 1 <= 1 col1 > 1 AND col1 <= 100col1 > 1 AND col1 <= 100 col1 > 100 AND col1 <= 1,000col1 > 100 AND col1 <= 1,000 col1 > 1000col1 > 1000

I.I. 列での uniqueidentifier データ型の使用Using the uniqueidentifier data type in a column

次の例では、uniqueidentifier 列を含むテーブルを作成します。The following example creates a table with a uniqueidentifier column. この例では、PRIMARY KEY 制約を使って、重複値を挿入するユーザーからテーブルを保護し、DEFAULT 制約で NEWSEQUENTIALID() 関数を使って、新しい行の値を指定します。The example uses a PRIMARY KEY constraint to protect the table against users inserting duplicated values, and it uses the NEWSEQUENTIALID() function in the DEFAULT constraint to provide values for new rows. また、$ROWGUID キーワードを使用して参照できるように、この uniqueidentifier 列に ROWGUIDCOL プロパティを適用します。The ROWGUIDCOL property is applied to the uniqueidentifier column so that it can be referenced using the $ROWGUID keyword.

CREATE TABLE dbo.Globally_Unique_Data
    (guid uniqueidentifier
        CONSTRAINT Guid_Default DEFAULT
        NEWSEQUENTIALID() ROWGUIDCOL,
    Employee_Name varchar(60)
    CONSTRAINT Guid_PK PRIMARY KEY (guid) );

J.J. 計算列に式を使用するUsing an expression for a computed column

次の例は、式 ((low + high)/2) を使用して myavg 計算列を計算する方法を示しています。The following example shows the use of an expression ((low + high)/2) for calculating the myavg computed column.

CREATE TABLE dbo.mytable
    ( low int, high int, myavg AS (low + high)/2 ) ;

K.K. ユーザー定義型の列に基づく計算列の作成Creating a computed column based on a user-defined type column

次の例では、ユーザー定義型 utf8string として定義された 1 つの列を持つテーブルを作成します。型のアセンブリと型自体が現在のデータベース中に既に作成されていることを前提としています。The following example creates a table with one column defined as user-defined type utf8string, assuming that the type's assembly, and the type itself, have already been created in the current database. 2 番目の列は utf8string に基づいて定義され、type(class) utf8string のメソッド ToString() を使用して列の値が計算されます。A second column is defined based on utf8string, and uses method ToString() of type(class)utf8string to compute a value for the column.

CREATE TABLE UDTypeTable
    ( u utf8string, ustr AS u.ToString() PERSISTED ) ;

L.L. 計算列に対する USER_NAME 関数の使用Using the USER_NAME function for a computed column

次の例では、myuser_name 列で USER_NAME() 関数を使用します。The following example uses the USER_NAME() function in the myuser_name column.

CREATE TABLE dbo.mylogintable
    ( date_in datetime, user_id int, myuser_name AS USER_NAME() ) ;

M.M. FILESTREAM 列を含むテーブルを作成するCreating a table that has a FILESTREAM column

次の例では、Photo という FILESTREAM 列を含むテーブルを作成します。The following example creates a table that has a FILESTREAM column Photo. テーブルに 1 つ以上の FILESTREAM 列が含まれる場合、テーブルには ROWGUIDCOL 列が 1 つ存在する必要があります。If a table has one or more FILESTREAM columns, the table must have one ROWGUIDCOL column.

CREATE TABLE dbo.EmployeePhoto
    (
     EmployeeId int NOT NULL PRIMARY KEY
    ,Photo varbinary(max) FILESTREAM NULL
    ,MyRowGuidColumn uniqueidentifier NOT NULL ROWGUIDCOL
        UNIQUE DEFAULT NEWID()
    );

N.N. 行の圧縮を使用するテーブルの作成Creating a table that uses row compression

次の例では、行の圧縮を使用するテーブルを作成します。The following example creates a table that uses row compression.

CREATE TABLE dbo.T1
(c1 int, c2 nvarchar(200) )
WITH (DATA_COMPRESSION = ROW);

その他のデータ圧縮の例については、「データ圧縮」を参照してください。For additional data compression examples, see Data Compression.

O.O. スパース列と列セットを含むテーブルの作成Creating a table that has sparse columns and a column set

次の例では、1 つのスパース列を含むテーブルと、2 つのスパース列と 1 つの列セットを含むテーブルを作成する方法を示します。The following examples show to how to create a table that has a sparse column, and a table that has two sparse columns and a column set. これらの例では基本構文を使用します。The examples use the basic syntax. さらに複雑な例については、「スパース列の使用」と「列セットの使用」をご覧ください。For more complex examples, see Use Sparse Columns and Use Column Sets.

この例では、1 つのスパース列を含むテーブルを作成します。This example creates a table that has a sparse column.

CREATE TABLE dbo.T1
    (c1 int PRIMARY KEY,
    c2 varchar(50) SPARSE NULL ) ;

次の例では、2 つのスパース列と CSet という 1 つの列セットを含むテーブルを作成します。This example creates a table that has two sparse columns and a column set named CSet.

CREATE TABLE T1
    (c1 int PRIMARY KEY,
    c2 varchar(50) SPARSE NULL,
    c3 int SPARSE NULL,
    CSet XML COLUMN_SET FOR ALL_SPARSE_COLUMNS ) ;

P.P. システム バージョン管理されたディスク ベースのテンポラル テーブルの作成Creating a system-versioned disk-based temporal table

適用対象: SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL Server 2017SQL Server 2017 および Azure SQL データベースAzure SQL DatabaseApplies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL データベースAzure SQL Database.

次の例では、新しい履歴テーブルにリンクされたテンポラル テーブルを作成する方法と、既存の履歴テーブルにリンクされたテンポラル テーブルを作成する方法を示します。The following examples show how to create a temporal table linked to a new history table, and how to create a temporal table linked to an existing history table. テンポラル テーブルでは、システムのバージョン管理を有効にするテーブルに対して有効になるように定義された主キーを含める必要があることに注意してください。Note that the temporal table must have a primary key defined to be enabled for the table to be enabled for system versioning. 既存のテーブルのシステムのバージョン管理の追加または削除方法を示す例については、「使用例」でシステムのバージョン管理の例をご覧ください。For examples showing how to add or remove system versioning on an existing table, see System Versioning in Examples. ユース ケースについては、「テンポラル テーブル」をご覧ください。For use cases, see Temporal Tables.

この例では、新しい履歴テーブルにリンクされた新しいテンポラル テーブルを作成します。This example creates a new temporal table linked to a new history table.

CREATE TABLE Department
(
    DepartmentNumber char(10) NOT NULL PRIMARY KEY CLUSTERED,
    DepartmentName varchar(50) NOT NULL,
    ManagerID int NULL,
    ParentDepartmentNumber char(10) NULL,
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH (SYSTEM_VERSIONING = ON);

この例では、既存の履歴テーブルにリンクされた新しいテンポラル テーブルを作成します。This example creates a new temporal table linked to an existing history table.

--Existing table
CREATE TABLE Department_History
(
    DepartmentNumber char(10) NOT NULL,
    DepartmentName varchar(50) NOT NULL,
    ManagerID int NULL,
    ParentDepartmentNumber char(10) NULL,
    SysStartTime datetime2 NOT NULL,
    SysEndTime datetime2 NOT NULL
);
--Temporal table
CREATE TABLE Department
(
    DepartmentNumber char(10) NOT NULL PRIMARY KEY CLUSTERED,
    DepartmentName varchar(50) NOT NULL,
    ManagerID INT NULL,
    ParentDepartmentNumber char(10) NULL,
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH
    (SYSTEM_VERSIONING = ON
        (HISTORY_TABLE = dbo.Department_History, DATA_CONSISTENCY_CHECK = ON )
    );

Q.Q. システム バージョン管理されたメモリ最適化テンポラル テーブルの作成Creating a system-versioned memory-optimized temporal table

適用対象: SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL Server 2017SQL Server 2017 および Azure SQL データベースAzure SQL DatabaseApplies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL データベースAzure SQL Database.

次の例では、ディスク ベースの新しい履歴テーブルにリンクされた、システム バージョン管理されたメモリ最適化テンポラル テーブルを作成する方法を示します。The following example shows how to create a system-versioned memory-optimized temporal table linked to a new disk-based history table.

この例では、新しい履歴テーブルにリンクされた新しいテンポラル テーブルを作成します。This example creates a new temporal table linked to a new history table.

CREATE SCHEMA History
GO
CREATE TABLE dbo.Department
(
    DepartmentNumber char(10) NOT NULL PRIMARY KEY NONCLUSTERED,
    DepartmentName varchar(50) NOT NULL,
    ManagerID int NULL,
    ParentDepartmentNumber char(10) NULL,
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH
    (
        MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA,
            SYSTEM_VERSIONING = ON ( HISTORY_TABLE = History.DepartmentHistory )
    );

この例では、既存の履歴テーブルにリンクされた新しいテンポラル テーブルを作成します。This example creates a new temporal table linked to an existing history table.

--Existing table
CREATE TABLE Department_History
(
    DepartmentNumber char(10) NOT NULL,
    DepartmentName varchar(50) NOT NULL,
    ManagerID int NULL,
    ParentDepartmentNumber char(10) NULL,
    SysStartTime datetime2 NOT NULL,
    SysEndTime datetime2 NOT NULL
);
--Temporal table
CREATE TABLE Department
(
    DepartmentNumber char(10) NOT NULL PRIMARY KEY CLUSTERED,
    DepartmentName varchar(50) NOT NULL,
    ManagerID INT NULL,
    ParentDepartmentNumber char(10) NULL,
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)
)
WITH
    (SYSTEM_VERSIONING = ON
        (HISTORY_TABLE = dbo.Department_History, DATA_CONSISTENCY_CHECK = ON )
    );

R.R. 暗号化された列を含むテーブルの作成Creating a table with encrypted columns

次の例では、2 つの暗号化された列を含むテーブルを作成します。The following example creates a table with two encrypted columns. 詳細については、「 Always Encrypted」を参照してください。For more information, see Always Encrypted.

CREATE TABLE Customers (
    CustName nvarchar(60)
        ENCRYPTED WITH
            (
             COLUMN_ENCRYPTION_KEY = MyCEK,
             ENCRYPTION_TYPE = RANDOMIZED,
             ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
            ),
    SSN varchar(11) COLLATE Latin1_General_BIN2
        ENCRYPTED WITH
            (
             COLUMN_ENCRYPTION_KEY = MyCEK,
             ENCRYPTION_TYPE = DETERMINISTIC ,
             ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
            ),
    Age int NULL
);

S.S. インライン フィルターが適用されたインデックスを作成しますCreate an inline filtered index

インライン フィルターが適用されたインデックスを持つテーブルを作成します。Creates a table with an inline filtered index.

CREATE TABLE t1
(
    c1 int,
    index IX1 (c1) WHERE c1 > 0
);

T.T. インライン インデックスの作成Create an inline index

ディスク ベース テーブルで NONCLUSTERED インラインを使用する方法を次に示します。The following shows how to use NONCLUSTERED inline for disk-based tables:

CREATE TABLE t1 
(
    c1 int, 
    INDEX ix_1 NONCLUSTERED (c1)
);

CREATE TABLE t2 
(
    c1 int, 
    c2 int INDEX ix_1 NONCLUSTERED
);

CREATE TABLE t3 
(
    c1 int, 
    c2 int, 
    INDEX ix_1 NONCLUSTERED (c1,c2)
);

U.U. 匿名で名前付けされた複合主キーを持つ一時テーブルを作成しますCreate a temporary table with an anonymously named compound primary key

匿名で名前付けされた複合主キーを持つテーブルを作成します。Creates a table with an anonymously named compound primary key. これは、(それぞれが別のセッションにある) 2 つのセッション スコープの一時テーブルが、同じ制約の名前を使用している場合に、実行時の競合を回避するのに役立ちます。This is useful to avoid run-time conflicts where two session-scoped temp tables, each in a separate session, use the same name for a constraint.

CREATE TABLE #tmp
(
    c1 int,
    c2 int,
    PRIMARY KEY CLUSTERED ([c1], [c2])
);
GO

制約を明示的に名付ける場合は、2 つ目のセッションで次のようなエラーが発生します。If you explicitly name the constraint, the second session will generate an error such as:

Msg 2714, Level 16, State 5, Line 1
There is already an object named 'PK_#tmp' in the database.
Msg 1750, Level 16, State 1, Line 1
Could not create constraint or index. See previous errors.

一時テーブルの名前が一意であるのに対して、制約の名前が一意ではないことが原因で、問題が発生しています。The problem arises from the fact that while the temp table name is uniquified, the constraint names are not.

V.V. Azure SQL Database でのグローバル一時テーブルの使用Using global temporary tables in Azure SQL Database

セッション A は、グローバル一時テーブル ##test を Azure SQL データベースAzure SQL Database testdb1 に作成し、1 行を追加しますSession A creates a global temp table ##test in Azure SQL データベースAzure SQL Database testdb1 and adds 1 row

CREATE TABLE ##test (
    a int, 
    b int
);
INSERT INTO ##test 
VALUES (1,1);

--Obtain object ID for temp table ##test
SELECT OBJECT_ID('tempdb.dbo.##test') AS 'Object ID';

以下に結果セットを示します。Here is the result set.

1253579504

tempdb (2) で指定されたオブジェクト ID 1253579504 のグローバル一時テーブル名を取得しますObtain global temp table name for a given object ID 1253579504 in tempdb (2)

SELECT name FROM tempdb.sys.objects WHERE object_id = 1253579504

以下に結果セットを示します。Here is the result set.

##test

セッション B は、Azure SQL データベースAzure SQL Database testdb1 に接続し、セッション A によって作成されたテーブル ##test にアクセスできますSession B connects to Azure SQL データベースAzure SQL Database testdb1 and can access table ##test created by session A

SELECT * FROM ##test

以下に結果セットを示します。Here is the result set.

1,1

セッション C は、Azure SQL データベースAzure SQL Database testdb2 内の別のデータベースに接続し、testdb1 で作成された ##test にアクセスしようとします。Session C connects to another database in Azure SQL データベースAzure SQL Database testdb2 and wants to access ##test created in testdb1. この選択は、グローバル一時テーブルのデータベース スコープが原因で失敗しますThis select fails due to the database scope for the global temp tables

SELECT * FROM ##test

これにより、次のエラーが生成されます。Which generates the following error:

Msg 208, Level 16, State 0, Line 1
Invalid object name '##test'

現在のユーザー データベース testdb1 からの Azure SQL データベースAzure SQL Database tempdb 内のシステム オブジェクトのアドレス指定Addressing system object in Azure SQL データベースAzure SQL Database tempdb from current user database testdb1

SELECT * FROM tempdb.sys.objects
SELECT * FROM tempdb.sys.columns
SELECT * FROM tempdb.sys.database_files

参照See Also

ALTER TABLE ALTER TABLE
COLUMNPROPERTY COLUMNPROPERTY
CREATE INDEX CREATE INDEX
CREATE VIEW CREATE VIEW
データ型 Data Types
DROP INDEX DROP INDEX
sys.dm_sql_referenced_entities sys.dm_sql_referenced_entities
sys.dm_sql_referencing_entities sys.dm_sql_referencing_entities
DROP TABLE DROP TABLE
CREATE PARTITION FUNCTION CREATE PARTITION FUNCTION
CREATE PARTITION SCHEME CREATE PARTITION SCHEME
CREATE TYPE CREATE TYPE
EVENTDATA EVENTDATA
sp_help sp_help
sp_helpconstraint sp_helpconstraint
sp_rename sp_rename
sp_spaceusedsp_spaceused