テーブルの作成と変更の基礎

データベースをデザインしたら、データベース内にデータを格納するテーブルを作成できます。通常、データはパーマネント テーブルに格納しますが、一時テーブルを作成してデータを格納することもできます。テーブルは、削除されるまでデータベース ファイルに格納され、必要な権限を持っているすべてのユーザーが使用できます。

テーブルのプロパティ

1 つのテーブルには最大 1,024 列を定義できます。テーブル名と列名は識別子のルールに準拠する必要があります。これらの名前は、あるテーブル内では一意である必要がありますが、同じデータベースの別のテーブルでは同じ列名を使用できます。詳細については、「識別子」および「オブジェクト名としての識別子の使用」を参照してください。また、各列のデータ型を定義する必要もあります。詳細については、「列へのデータ型の割り当て」を参照してください。

テーブル名は、データベース内のスキーマごとに一意である必要があります。ただし、各テーブルに別のスキーマを指定すると、同じテーブル名を使用して複数のテーブルを作成できます。employees という名前のテーブルを 2 つ作成し、一方のテーブルのスキーマに Jonah を、もう一方のテーブルのスキーマに Sally を指定できます。employees テーブルのどちらかを使用する必要がある場合は、テーブル名と一緒にスキーマを指定してテーブルを区別します。

テーブルを作成するには

CREATE TABLE (Transact-SQL)

テーブルを作成する方法 (Visual Database Tools)

一時テーブル

一時テーブルは、tempdb に格納される点と使用されなくなると自動的に削除されるという点を除いて、パーマネント テーブルと同じです。

一時テーブルには、ローカル一時テーブルとグローバル一時テーブルの 2 種類があります。この 2 種類の一時テーブルでは、名前、表示設定、および可用性が異なります。ローカル一時テーブル名の先頭には、番号記号 (#) が 1 つ付いています。このテーブルは、作成したユーザーの現在の接続でのみ表示され、このユーザーが SQL Server のインスタンスから切断すると削除されます。グローバル一時テーブル名の先頭には、番号記号が 2 つ (##) 付いています。このテーブルは、作成されるとすべてのユーザーに表示され、このテーブルを参照するすべてのユーザーが SQL Server のインスタンスから切断すると削除されます。

たとえば、employees テーブルを作成すると、そのテーブルを使用するためのセキュリティ権限を持つすべてのユーザーは、テーブルが削除されるまで、そのテーブルを使用できます。データベース セッションで #employees という名前のローカル一時テーブルが作成された場合、そのセッションだけがテーブルを使用できます。セッションが切断されると、このテーブルは削除されます。##employees という名前のグローバル一時テーブルを作成すると、そのデータベース内のすべてのユーザーがこのテーブルを使用できます。グローバル一時テーブルを作成しても、他のユーザーがそのテーブルを使用しない場合は、作成したユーザーが SQL Server から切断されるとテーブルが削除されます。他のユーザーがテーブルを使用している場合、テーブルを作成したユーザーが切断され、他のすべてのセッションで使用されなくなると、SQL Server によりテーブルが削除されます。

名前付き制約を使用して、ユーザー定義のトランザクションのスコープ内で一時テーブルが作成される場合、一時テーブルを作成するステートメントを実行できるのは一度に 1 人のユーザーだけです。たとえば、名前付きの主キー制約を使用して、ストアド プロシージャによって一時テーブルが作成される場合、そのストアド プロシージャを複数のユーザーが同時に実行することはできません。

多くの場合、一時テーブルを使用する代わりに、table データ型の変数を使用することができます。table 変数の使用方法の詳細については、「table (Transact-SQL)」を参照してください。

テーブルの変更

テーブルの作成後、最初にテーブルを作成したときに定義したオプションの多くを変更できます。変更できるオプションには、次のようなものがあります。

  • 列を追加、変更、または削除できます。たとえば、いくつかの制限事項はありますが、列の名前、長さ、データ型、有効桁数、小数点以下桁数、NULL 値の許容はすべて変更できます。詳細については、「列プロパティの変更」を参照してください。

  • パーティション テーブルの場合、テーブルのパーティションを再分割したり、パーティションを個別に追加または削除したりすることができます。詳細については、「パーティション テーブルとパーティション インデックスの変更」および「パーティションの切り替えを使用した効率的なデータの転送」を参照してください。

  • PRIMARY KEY 制約および FOREIGN KEY 制約を追加または削除できます。

  • UNIQUE 制約、CHECK 制約、DEFAULT 定義、およびオブジェクトを追加または削除できます。

  • IDENTITY プロパティまたは ROWGUIDCOL プロパティを使用して識別子列を追加または削除できます。また、ROWGUIDCOL プロパティを既存の列に追加したり、既存の列から削除したりすることもできます。ただし、1 つのテーブル内に ROWGUIDCOL プロパティを指定できるのは 1 列だけです。

  • テーブルおよびテーブル内の選択した列をフルテキスト インデックス作成用に登録できます。

テーブルの変更に関する詳細については、「ALTER TABLE (Transact-SQL)」を参照してください。

テーブルの名前とスキーマも変更できます。テーブルの名前またはスキーマを変更する場合は、そのテーブルの変更前の名前またはスキーマを使用しているトリガー、ストアド プロシージャ、Transact-SQL スクリプト、またはその他のプログラミング コード内のテーブル名も変更する必要があります。

テーブル名を変更するには

sp_rename (Transact-SQL)

[テーブルのプロパティ] (Visual Database Tools)

テーブルのスキーマを変更するには

ALTER SCHEMA (Transact-SQL)