次の方法で共有


ALTER TABLE column_definition (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric のウェアハウスMicrosoft Fabric プレビューの SQL データベース

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

Transact-SQL 構文表記規則

Syntax

column_name <data_type>  
[ FILESTREAM ]  
[ COLLATE collation_name ]   
[ NULL | NOT NULL ]  
[   
    [ CONSTRAINT constraint_name ] DEFAULT constant_expression [ WITH VALUES ]   
    | IDENTITY [ ( seed , increment ) ] [ NOT FOR REPLICATION ]   
]  
[ ROWGUIDCOL ]   
[ SPARSE ]   
[ ENCRYPTED WITH  
  ( COLUMN_ENCRYPTION_KEY = key_name ,  
      ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED } ,   
      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 }   
        [ 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 )   
}  

Arguments

column_name

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

[ type_schema_name. ] type_name

追加される列のデータ型と、それが属するスキーマ。

type_name は次のいずれかです。

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

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

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

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

  • SQL Server のシステム データ型

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

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

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

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

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

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

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

xml_schema_collection
適用対象: SQL Server 2008 (10.0.x) 以降のバージョン。

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

FILESTREAM

必要に応じて、type_namevarbinary(max) の列に対して FILESTREAM ストレージ属性を指定します。

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

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

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

列定義の使用方法を示す例については、 FILESTREAM を参照してください。

COLLATE collation_name

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

COLLATE句を使用して、charvarchar、nchar、および nvarchar データ型の列の照合順序のみを指定できます

COLLATE句の詳細については、COLLATE を参照してください。

NULL |NULL でない

列で NULL 値を許可するかどうかを決定します。 NULL は厳密には制約ではありませんが、 NOT NULLと同じように指定できます。

[ CONSTRAINT constraint_name ]

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

DEFAULT

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

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

WITH VALUES

列と DEFAULT 制約を追加するときに、列で NULLS が許可されている場合、 WITH VALUES は、新しい列の値を既存の行の DEFAULT constant_expression で指定された値に設定します。

追加する列で NULLS が許可されていない場合、既存の行の場合、列の値は常に DEFAULT constant expression で指定された値に設定されます。

SQL Server 2012 (11.x) 以降では、 これはメタデータ操作に null 以外の列を追加する操作as-an-online-operation にすることができます。

関連する列が追加されない場合にこれを使用しても、影響はありません。

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

IDENTITY

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

ID 列は、テーブルの一意の行識別子として機能するために、 PRIMARY KEY 制約で一般的に使用されます。 IDENTITY プロパティは、tinyintsmallintintbigintdecimal(p,0)、または numeric(p,0) 列に割り当てることができます。 ID 列は 1 つのテーブルにつき 1 つだけ作成できます。 DEFAULT キーワードとバインドされた既定値は、ID 列では使用できません。 seed と increment は両方指定するか、どちらも指定しないでください。 どちらも指定されていない場合、既定値は (1,1)

Note

既存のテーブル列を変更して、 IDENTITY プロパティを追加することはできません。

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

値を明示的に挿入できるようにすることで列の IDENTITY プロパティを無効にするには、 SET IDENTITY_INSERTを使用します。

テーブルに読み込まれた最初の行に使用される値。

インクリメント 読み込まれる前の行の ID 値に追加された増分値。

レプリケーション用ではありません

適用対象: SQL Server 2008 (10.0.x) 以降のバージョン。

IDENTITY プロパティに指定できます。 IDENTITY プロパティに対してこの句が指定されている場合、レプリケーション エージェントが挿入操作を実行するときに ID 列の値はインクリメントされません。

ROWGUIDCOL

適用対象: SQL Server 2008 (10.0.x) 以降のバージョン。

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

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

SPARSE

列がスパース列であることを示します。 スパース列のストレージは NULL 値用に最適化されます。 スパース列を NOT NULL として指定することはできません。 スパース列のその他の制限事項と詳細については、「スパース列の使用」を参照してください。

<column_constraint>
列制約の引数の定義については、「column_constraint (Transact-SQL)」を参照してください。

ENCRYPTED WITH

Always Encrypted 機能を使って暗号化列を指定します。 ENCRYPTED WITH は、Microsoft Fabric プレビューの SQL データベースではサポートされていません。

COLUMN_ENCRYPTION_KEY = key_name

列の暗号化キーを指定します。 詳しくは、「CREATE COLUMN ENCRYPTION KEY (Transact-SQL)」をご覧ください。

ENCRYPTION_TYPE = { DETERMINISTIC |RANDOMIZED }

確定的な暗号化 は常に任意のプレーン テキストを指定した値の場合は、同じ暗号化された値を生成するメソッドを使用します。 決定論的な暗号化を使うことにより、等価比較を使った検索や、グループ化、暗号化された値に基づく等価結合を使ったテーブルの結合が可能になりますが、承認されていないユーザーが、暗号化された列のパターンを調べることで暗号化された値に関する情報を推測することも可能になります。 決定論的に暗号化された列で 2 つのテーブルを結合することができるのは、両方の列が同じ列暗号化キーを使って暗号化されている場合のみです。 明確な暗号化では、バイナリ 2 文字型の列の並べ替え順序を持つ列の照合順序を使用する必要があります。

暗号化をランダム化 は低い予測可能な方法でデータを暗号化するためのメソッドを使用します。 ランダム化された暗号化は、より安全ですが、SQL Server インスタンスでセキュア エンクレーブを使用する Always Encrypted がサポートされる場合を除き、暗号化された列に対する計算とインデックス作成はすべて阻止されます。

Always Encrypted (セキュア エンクレーブなし) を使用している場合、政府の ID 番号などのパラメーターまたはグループ化パラメーターで検索される列には、決定論的な暗号化を使用します。 ランダム化された暗号化を使用します。クレジット カード番号などのデータは、他のレコードとグループ化されていないか、テーブルの結合に使用され、他の列 (トランザクション番号など) を使用して、目的の暗号化された列を含む行を検索するために検索されません。

セキュア エンクレーブを使用する Always Encrypted を使用する場合は、ランダム化された暗号化が推奨される暗号化の種類です。

列は、該当するデータ型である必要があります。

ALGORITHM

適用対象: SQL Server 2016 (13.x) 以降、SQL Database。

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

機能の制約などについて詳しくは、「Always Encrypted (データベース エンジン)」をご覧ください。

ADD MASKED WITH (FUNCTION = ' mask_function ')

適用対象: SQL Server 2016 (13.x) 以降、SQL Database。

動的なデータ マスクを指定します。 mask_function マスキング関数は、適切なパラメーターの名前を指定します。 以下の関数を使用できます。

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

関数のパラメーターについては、「動的なデータ マスキング」を参照してください。

Remarks

uniqueidentifier データ型を持つ列を追加する場合は、NEWID()関数を使用してテーブル内の既存の行ごとに新しい列に一意の識別子の値を指定する既定値で定義できます。 詳細については、 NEWID (Transact-SQL) を参照してください。

データベース エンジンでは、列定義で DEFAULTIDENTITYROWGUIDCOL、または列の制約を指定する順序は適用されません。

列を追加すると、データ行サイズが 8,060 バイトを超えると、 ALTER TABLE ステートメントは失敗します。

Examples

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