ビューの設計と実装

ビューを作成する前に、次のガイドラインを考慮してください。

  • ビューは現在のデータベースでのみ作成可能です。ただし、分散クエリを使用してビューを定義する場合、そのビューが参照するテーブルやビューは他のデータベースや他のサーバーに配置できます。

  • ビュー名は識別子の規則に従う必要があり、スキーマごとに一意になる必要があります。また、ビュー名は各スキーマに含まれるテーブルと同じ名前にすることはできません。

  • 他のビューを基にビューを構築できます。Microsoft SQL Server では、ビューを入れ子にすることができます。入れ子のレベルは 32 を超えることはできません。ただし、実際のビューの入れ子の制限は、ビューの複雑さと使用可能なメモリ量によって、このレベルよりも少なくなることがあります。

  • ルール、または DEFAULT 定義を、ビューに関連付けることはできません。

  • AFTER トリガをビューに関連付けることはできません。INSTEAD OF トリガのみ関連付けることができます。

  • ビューを定義するクエリには、COMPUTE 句、COMPUTE BY 句、または INTO キーワードは指定できません。

  • ビューを定義するクエリには、SELECT ステートメントの選択リストに TOP 句が指定されていないと、ORDER BY 句は指定できません。

  • ビューを定義するクエリには、クエリ ヒントを指定する OPTION 句は指定できません。

  • ビューを定義するクエリには、TABLESAMPLE 句は指定できません。

  • ビューにフルテキスト インデックス定義を指定することはできません。

  • 一時ビューを作成したり、一時テーブルを基にビューを作成することはできません。

  • SCHEMABINDING 句を指定して作成したビューに参加しているビュー、テーブル、または関数は、そのビューが削除または変更されてスキーマ バインドがなくならない限り削除できません。さらに、スキーマ バインドを含むビューに参加しているテーブルに対する ALTER TABLE ステートメントは、そのステートメントがビュー定義に影響を与える場合は、失敗します。

  • ビューが SCHEMABINDING 句を使用して作成したものでない場合、ビューの基になっているオブジェクトに対して、ビューの定義に影響するような変更が行われた際には、sp_refreshview を実行する必要があります。この操作を行わないと、ビューの照会時に、予期しない結果が表示される可能性があります。

  • クエリがフルテキスト インデックス用に構成されたテーブルを参照している場合は、ビュー定義にフルテキスト クエリを含めることができます。ただし、ビューではフルテキスト クエリを実行できません。

  • 次の場合、ビューのすべての列の名前を指定する必要があります。

    • ビューの列のどれかが算術式、組み込み関数、または定数から導き出される場合。

    • ビューの 2 つ以上の列が同名になる場合。これは、通常ビュー定義が結合を含み、複数のテーブルからの列が同じ名前を持つ場合です。

    • ビューの列に、派生元の列とは異なる名前を付ける場合。ビューの列名を変更することもできます。ビューの列は、名前の変更とは関係なく、派生元の列のデータ型を継承します。

      注意

      ビューが外部結合を含むクエリに基づく場合、この規則は適用されません。NULL 値を許容しない列から許容する列に変わってしまうことがあるためです。

      これ以外の場合、ビューの作成時に列名を指定する必要はありません。ビューの列には、ビューを定義するクエリによって参照される列と同じ名前のデータ型が SQL Server によって自動的に与えられます。選択リストとはベース テーブルの列のすべてまたは部分リストのことです。

ビューを作成するには、データベースの所有者からビューを作成する権限が許可されている必要があります。また、SCHEMABINDING 句を使用してビューを作成している場合は、ビュー定義内で参照しているテーブルまたはビューに適切な権限が必要です。

既定では、ビューを使用して行を追加または更新するとき、ビューを定義するクエリの基準に合わなくなった行はビューに表示されなくなります。たとえば、クエリを作成し、従業員の給与が $30,000 より少ない行をテーブルからすべて取得するビューを定義するとします。従業員の給与が $32,000 に増えた場合、ビューに対するクエリを実行すると、その従業員はビューによって設定された条件に給与が合致しないため、表示されません。WITH CHECK OPTION 句を使用すると、ビューに対して実行されるすべてのデータ変更ステートメントは、ビューを定義する SELECT ステートメントの条件に従うことが義務づけられます。WITH CHECK OPTION 句を使用した場合、行がビューに表示されなくなるような変更は実行できなくなります。このような変更はキャンセルされ、エラーが表示されることになります。

ビューを作成するには