ALTER TABLE column_definition (Transact-SQL)ALTER TABLE column_definition (Transact-SQL)

適用対象: ○SQL Server (2008 以降) ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

ALTER TABLE を使用してテーブルに追加される列のプロパティを指定します。Specifies the properties of a column that are added to a table by using ALTER TABLE.

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


column_name <data_type>  
[ COLLATE collation_name ]   
    [ CONSTRAINT constraint_name ] DEFAULT constant_expression [ WITH VALUES ]   
    | IDENTITY [ ( seed , increment ) ] [ NOT FOR REPLICATION ]   
[ SPARSE ]   
  ( COLUMN_ENCRYPTION_KEY = key_name ,  
      ALGORITHM =  'AEAD_AES_256_CBC_HMAC_SHA_256'   
  ) ]  
[ MASKED WITH ( FUNCTION = ' mask_function ') ]  
[ <column_constraint> [ ...n ] ]  
<data type> ::=   
[ type_schema_name . ] type_name   
    [ ( precision [ , scale ] | max |   
        [ { CONTENT | DOCUMENT } ] xml_schema_collection ) ]   
<column_constraint> ::=   
[ CONSTRAINT constraint_name ]   
{     { PRIMARY KEY | UNIQUE }   
            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 ) ]   
        [ NOT FOR REPLICATION ]   
  | CHECK [ NOT FOR REPLICATION ] ( logical_expression )   


変更、追加、または削除する列の名前を指定します。Is the name of the column to be altered, added, or dropped. column_name は 1 ~ 128 文字で指定できます。column_name can consist of 1 through 128 characters. timestamp データ型で作成される新しい列の場合は、column_name を省略できます。For new columns, created with a timestamp data type, column_name can be omitted. timestamp データ型の列に対して column_name を指定しない場合には、名前 timestamp が使われます。If no column_name is specified for a timestamp data type column, the name timestamp is used.

[ type_schema_name.[ type_schema_name. ] type_name] type_name
追加する列のデータ型と、それが属するスキーマを指定します。Is the data type for the column that is added and the schema to which it belongs.

type_name は次のいずれかです。type_name can be:

  • MicrosoftMicrosoft SQL ServerSQL Server システム データ型。A MicrosoftMicrosoftSQL ServerSQL Server system data type.

  • SQL ServerSQL Server システム データ型に基づく別名データ型。An alias data type based on a SQL ServerSQL Server system data type. このデータ型をテーブル定義で使用するには、先に CREATE TYPE を使って作成しておく必要があります。Alias data types must be created by using CREATE TYPE before they can be used in a table definition.

  • MicrosoftMicrosoft .NET Framework.NET Framework ユーザー定義型とそれが属するスキーマ。A MicrosoftMicrosoft .NET Framework.NET Framework user-defined type and the schema to which it belongs. .NET Framework.NET Framework ユーザー定義型をテーブル定義で使用するには、先に CREATE TYPE を使って作成しておく必要があります。A .NET Framework.NET Framework user-defined type must be created by using CREATE TYPE before it can be used in a table definition.

type_schema_name を指定しない場合、MicrosoftMicrosoft データベース エンジンDatabase Engineは次の順序で type_name を参照します。If type_schema_name is not specified, the MicrosoftMicrosoft データベース エンジン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.

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

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

varcharnvarcharvarbinary データ型のみに適用されます。Applies only to the varchar, nvarchar, and varbinary data types. これらは 2^31 バイトの文字とバイナリ データ、および 2^30 バイトの Unicode データを格納するときに使用されます。These are used for storing 2^31 bytes of character and binary data, and 2^30 bytes of Unicode data.

column_name 内の xml データ型の各インスタンスが複数のトップレベル要素で構成できることを指定します。Specifies that each instance of the xml data type in column_name can comprise 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 this is not specified, CONTENT is the default behavior.

column_name 内の xml データ型の各インスタンスは 1 つのトップレベル要素のみで構成できることを指定します。Specifies that each instance of the xml data type in column_name can comprise 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.

適用対象: SQL Server 2008:SQL Server 2008 から SQL Server 2017SQL Server 2017Applies to: SQL Server 2008:SQL Server 2008 through SQL Server 2017SQL Server 2017.

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.

必要に応じて、type_namevarbinary(max) の列に対して FILESTREAM ストレージ属性を指定します。Optionally specifies the FILESTREAM storage attribute for column that has a type_name of varbinary(max).

列に対して FILESTREAM を指定した場合、ROWGUIDCOL 属性を持つ uniqueidentifier データ型の列がテーブルに存在する必要があります。When FILESTREAM is specified for a column, 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 data is being inserted, 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.

列定義の使用方法を示す例については、「FILESTREAM (SQL Server)」を参照してください。For an example that shows how to use column definition, see FILESTREAM (SQL Server).

COLLATE collation_nameCOLLATE collation_name
列の照合順序を指定します。Specifies the collation of the column. 照合順序を指定しない場合、データベースの既定の照合順序が列に割り当てられます。If not specified, the column is assigned the default collation of the database. 照合順序名には、Windows 照合順序名または SQL 照合順序名を指定できます。Collation name can be either a Windows collation name or an SQL collation name. 一覧と詳細については、「Windows 照合順序名 (Transact-SQL)」と「SQL Server 照合順序名 (Transact-SQL)」を参照してください。For a list and more information, see Windows Collation Name (Transact-SQL) and SQL Server Collation Name (Transact-SQL).

COLLATE 句を使用して照合順序を指定できるのは、charvarcharncharnvarchar データ型の列だけです。The COLLATE clause can be used to specify the collations only of columns of the char, varchar, nchar, and nvarchar data types.

COLLATE 句の詳細については、「COLLATE (Transact-SQL)」を参照してください。For more information about the COLLATE clause, see COLLATE (Transact-SQL).

列で NULL 値を許すかどうかを示します。Determines 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.

[ CONSTRAINT constraint_name ][ CONSTRAINT constraint_name ]
DEFAULT 値の定義の開始を指定します。Specifies the start of a DEFAULT value definition. SQL ServerSQL Server の旧バージョンとの互換性を保つため、DEFAULT に制約名を割り当てることができます。To maintain compatibility with earlier versions of SQL ServerSQL Server, a constraint name can be assigned to a DEFAULT. constraint_name は、識別子の規則に従う必要があります。ただし、名前の先頭に番号記号 (#) を指定することはできません。constraint_name must follow the rules for identifiers, except that the name cannot start with a number sign (#). constraint_name を指定しない場合、DEFAULT 定義にはシステムによって作成される名前が割り当てられます。If constraint_name is not specified, a system-generated name is assigned to the DEFAULT definition.

列の既定値を指定するキーワードです。Is a keyword that specifies the default value for the column. DEFAULT 定義を使用すると、既存のデータ行に新しい列の値を設定できます。DEFAULT definitions can be used to provide values for a new column in the existing rows of data. DEFAULT 定義は、timestamp 列または IDENTITY プロパティが指定されている列には適用できません。DEFAULT definitions cannot be applied to timestamp columns, or columns with an IDENTITY property. ユーザー定義型の列に既定値を指定する場合は、その型で constant_expression 型からユーザー定義型への暗黙的な変換がサポートされている必要があります。If a default value is specified for a user-defined type column, the type must support an implicit conversion from constant_expression to the user-defined type.

リテラル値、NULL 値、または列の既定値として使用されるシステム関数です。Is a literal value, a NULL, or a system function used as the default column value. .NET Framework.NET Framework ユーザー定義型として定義されている列と共に使用する場合は、その型を実装したときに、constant_expression からユーザー定義型への暗黙的な変換がサポートされる必要があります。If used in conjunction with a column defined to be of a .NET Framework.NET Framework user-defined type, the implementation of the type must support an implicit conversion from the constant_expression to the user-defined type.

DEFAULT 制約と共に列を追加する際に列が NULL を許容している場合、WITH VALUES を使用すると、既存の行の新しい列の値は DEFAULT の constant_expression で指定される値に設定されます。When adding a column AND a DEFAULT constraint, if the column allows NULLS using WITH VALUES will, for existing rows, set the new column's value to the value given in DEFAULT constant_expression. 追加する列が NULL を許容していない場合、既存の行のその列の値は常に DEFAULT の constant expression で指定される値に設定されます。If the column being added does not allow NULLS, for existing rows, the column's value will always be set to the value given in the DEFAULT constant expression. SQL Server 2012 以降、これはメタ データの操作 adding-not-null-columns-as-an-online-operation である場合があります。Starting in SQL Server 2012 this may be a meta data operation adding-not-null-columns-as-an-online-operation. 関連する列が追加されない場合にこれを使用しても、影響はありません。If this is used when the related column isn't also being added then it has no effect.

DEFAULT constant_expression で指定される値が、既存の行に追加される新規列に格納されることを指定します。Specifies that the value given in DEFAULT constant_expression is stored in a new column that is added to existing rows. 追加する列に NULL 値が許容され、WITH VALUES を指定した場合、新しい列には既定値が格納され、既存の行に追加されます。If the added column allows null values and WITH VALUES is specified, the default value is stored in the new column that is added to existing rows. NULL 値が許容される列に対して WITH VALUES を指定しない場合は、既存の行の新しい列には NULL 値が格納されます。If WITH VALUES is not specified for columns that allow nulls, the value NULL is stored in the new column, in existing rows. 新しい列で NULL 値が許容されない場合は、WITH VALUES の指定に関係なく、新しい行に既定値が格納されます。If the new column does not allow nulls, the default value is stored in new rows regardless of whether WITH VALUES is specified.

新しい列が ID 列であることを指定します。Specifies that the new column is an identity column. SQL Server データベース エンジンSQL Server Database Engineは、列に一意な増分値を設定します。The SQL Server データベース エンジンSQL Server Database Engine provides a unique, incremental value for the column. 既存のテーブルに ID 列を追加すると、テーブルの既存の行にシード値と増分値を持つ識別番号が追加されます。When you add identifier columns to existing tables, the identity numbers are added to the existing rows of the table with the seed and increment values. 行の更新順序は保証されません。The order in which the rows are updated is not guaranteed. 識別番号は、新しく追加された行に対しても生成されます。Identity numbers are also generated for any new rows that are added.

ID 列は通常、PRIMARY KEY 制約と組み合わせて使用し、テーブルの一意な行識別子 (ROWID) の役割を果たします。Identity columns are commonly used in conjunction 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 a tinyint, smallint, int, bigint, decimal(p,0), or numeric(p,0) column. ID 列は 1 つのテーブルにつき 1 つだけ作成できます。Only one identity column can be created per table. DEFAULT キーワードとバインドされている既定値は、ID 列で使用できません。The DEFAULT keyword and bound defaults cannot be used with an identity column. seed と increment は両方指定するか、どちらも指定しないでください。Either both the seed and increment must be specified, or neither. どちらも指定しない場合、既定値は (1,1) になります。If neither are specified, the default is (1,1).


既存のテーブル列を変更して IDENTITY プロパティを追加することはできません。You cannot modify an existing table column to add the IDENTITY property.

パブリッシュされたテーブルへの ID 列の追加はサポートされていません。これは、列をサブスクライバーにレプリケートするときに集約できなくなる可能性があるためです。Adding an identity column to a published table is not supported because it can result in nonconvergence when the column is replicated to the Subscriber. パブリッシャーの ID 列の値は、影響を受けるテーブルの行が物理的に格納されている順序に依存します。The values in the identity column at the Publisher depend on the order in which the rows for the affected table are physically stored. サブスクライバー側では行は別の方法で格納される場合があるため、ID 列の値は同じ行で異なる可能性があります。The rows might be stored differently at the Subscriber; therefore, the value for the identity column can be different for the same rows..

値の明示的な挿入を許可して列の IDENTITY プロパティを無効にするには、SET IDENTITY_INSERT を使用します。To disable the IDENTITY property of a column by allowing values to be explicitly inserted, use SET IDENTITY_INSERT.

テーブルに読み込まれる先頭行で使用される値を指定します。Is the value used for the first row loaded into the table.

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

適用対象: SQL Server 2008:SQL Server 2008 から SQL Server 2017SQL Server 2017Applies to: SQL Server 2008:SQL Server 2008 through SQL Server 2017SQL Server 2017.

IDENTITY プロパティに対して指定できます。Can be specified for the IDENTITY property. IDENTITY プロパティに対してこの句を指定した場合、レプリケーション エージェントが挿入操作を実行するとき ID 列の値は増加しません。If this clause is specified for the IDENTITY property, values are not incremented in identity columns when replication agents perform insert operations.

適用対象: SQL Server 2008:SQL Server 2008 から SQL Server 2017SQL Server 2017Applies to: SQL Server 2008:SQL Server 2008 through SQL Server 2017SQL Server 2017.

列が、行グローバル一意識別子列であることを指定します。Specifies that the column is a row globally unique identifier column. ROWGUIDCOL は、uniqueidentifier 列にのみ割り当てることができ、1 つのテーブルに 1 つの uniqueidentifier 列だけを ROWGUIDCOL 列として指定できます。ROWGUIDCOL can only be assigned to a uniqueidentifier column, and only one uniqueidentifier column per table can be designated as the ROWGUIDCOL column. ROWGUIDCOL は、ユーザー定義データ型の列には割り当てできません。ROWGUIDCOL cannot be assigned to columns of user-defined data types.

ROWGUIDCOL では、列に格納される値の一意性は設定されません。ROWGUIDCOL does not enforce uniqueness of the values stored in the column. また、テーブルに新しい行を挿入しても値は自動的に生成されません。Also, ROWGUIDCOL does not automatically generate values for new rows that are inserted into the table. 各列に一意な値を生成するには、INSERT ステートメントで NEWID 関数を使用するか、列の既定値として NEWID 関数を指定します。To generate unique values for each column, either use the NEWID function on INSERT statements or specify the NEWID function as the default for the column. 詳しくは、「NEWID (Transact-SQL)」および「INSERT (Transact-SQL)」をご覧ください。For more information, see NEWID (Transact-SQL)and INSERT (Transact-SQL).

列がスパース列であることを示します。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.

列制約の引数の定義については、「column_constraint (Transact-SQL)」を参照してください。For the definitions of the column constraint arguments, see column_constraint (Transact-SQL).

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

列の暗号化キーを指定します。Specifies the column encryption key. 詳しくは、「CREATE COLUMN ENCRYPTION KEY (Transact-SQL)」をご覧ください。For more information, see CREATE COLUMN ENCRYPTION KEY (Transact-SQL).

確定的な暗号化 は常に任意のプレーン テキストを指定した値の場合は、同じ暗号化された値を生成するメソッドを使用します。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 (セキュア エンクレーブなし) を使用している場合、政府の ID 番号などのパラメーターまたはグループ化パラメーターで検索される列には、決定論的な暗号化を使用します。If you are using Always Encrypted (without secure enclaves), use deterministic encryption for columns to 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.

適用対象: SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL Server 2017SQL Server 2017SQL DatabaseSQL DatabaseApplies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017, SQL DatabaseSQL Database.
'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 (Database Engine).

ADD MASKED WITH ( FUNCTION = ' mask_function ')ADD MASKED WITH ( FUNCTION = ' mask_function ')
適用対象: SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL Server 2017SQL Server 2017SQL データベースSQL DatabaseApplies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017, SQL データベースSQL Database.

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

  • default()default()

  • email()email()

  • partial()partial()

  • random()random()

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


追加される列が uniqueidentifier データ型の場合は、NEWID() 関数を使用する既定値を定義することで、テーブル内にある既存の各行の新しい列に一意の識別子値を設定できます。If a column is added having a uniqueidentifier data type, it can be defined with a default that uses the NEWID() function to supply the unique identifier values in the new column for each existing row in the table.

データベース エンジンDatabase Engineでは、列定義において DEFAULT、IDENTITY、ROWGUIDCOL または列制約を指定する場合に順序は適用されません。The データベース エンジンDatabase Engine does not enforce an order for specifying DEFAULT, IDENTITY, ROWGUIDCOL, or column constraints in a column definition.

列の追加によりデータ行のサイズが 8,060 バイトを超える場合、ALTER TABLE ステートメントは失敗します。ALTER TABLE statement will fail if adding the column will cause the data row size to exceed 8060 bytes.


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

参照See Also