パーティション ビューでのデータ変更

パーティション ビューが更新可能でない場合、そのパーティション ビューは元のテーブルの読み取り専用コピーとしてのみ使用できます。更新可能なパーティション ビューでは、元のテーブルのすべての機能を使用できます。

ビューが SELECT ステートメントのセットで、その個々の結果セットが UNION ALL ステートメントを使用して 1 つに結合されている場合、ビューは更新可能なパーティション ビューと見なされます。各 SELECT ステートメントは、SQL Server の 1 つのベース テーブルを参照します。このテーブルは、ローカル テーブルまたはリンク テーブルのいずれかで、4 つの部分で構成される名前、OPENROWSET 関数、または OPENDATASOURCE 関数を使用して参照できます。パススルー クエリを指定する OPENDATASOURCE 関数または OPENROWSET 関数は使用できません。

また、ビューを参照するデータ変更ステートメントは、INSERT、UPDATE、および DELETE の各ステートメントに対して定義されているルールに従う必要があります。

注意

パーティション ビューへの一括インポートは、bcp コマンド、BULK INSERT ステートメント、または INSERT ... SELECT * FROM OPENROWSET(BULK...) ステートメントでサポートされません。ただし、INSERT ステートメントを使用することにより、パーティション ビューに複数の行を挿入できます。

パーティション ビューが複数のサーバーに分散されている場合は、ベース テーブルでトリガまたは連鎖操作を使用しないでください。トリガまたは連鎖操作を実行すると、基になるデータが変更されてビュー定義に影響する可能性があります。

分散パーティション ビューを更新することができるのは、ユーザーがビューの基になる各テーブルの CONTROL 権限、ALTER 権限、TAKE OWNERSHIP 権限、または VIEW DEFINITION 権限を持っている場合だけです。詳細については、「分散パーティション ビューのメタデータ表示のトラブルシューティング」を参照してください。

注意

分散パーティション ビューを使用してデータを変更できるのは、SQL Server 2008 Enterprise または SQL Server 2008 Developer をインストールした場合だけです。ただし、ローカル パーティション ビューを使用したデータ変更は、SQL Server 2008 のすべてのエディションで実行できます。

INSERT ステートメント

INSERT ステートメントでは、パーティション ビューを介してメンバ テーブルにデータが追加されます。INSERT ステートメントは、以下のルールに従って作成する必要があります。

  • INSERT ステートメントには、すべての列を含める必要があります。ベース テーブル内で NULL 値を許容する列や、ベース テーブル内に DEFAULT 制約が定義されている列も例外ではありません。

  • INSERT ステートメントの VALUES 句に DEFAULT キーワードを指定することはできません。

  • INSERT ステートメントでは、いずれかのメンバ テーブルのパーティション分割列に定義されている CHECK 制約のロジックに応じた値を指定する必要があります。

  • メンバ テーブルに ID プロパティが設定された列が含まれている場合は、INSERT ステートメントを使用できません。

  • メンバ テーブルに timestamp 列が含まれている場合は、INSERT ステートメントを使用できません。

  • 同一ビューまたはいずれかのメンバ テーブルとの自己結合がある場合は、INSERT ステートメントを使用できません。

UPDATE ステートメント

UPDATE ステートメントでは、パーティション ビューを介して 1 つ以上のメンバ テーブル内のデータが変更されます。UPDATE ステートメントは、以下のルールに従って作成する必要があります。

  • UPDATE ステートメントで SET 句の値として DEFAULT キーワードを指定することはできません。対応するメンバ テーブルでその列に DEFAULT 値が定義されている場合も例外ではありません。

  • ID プロパティが設定されている列の値を変更できません。ただし、他の列は更新できます。

  • PRIMARY KEY の値は、列に text データ、image データ、または ntext データが含まれている場合は変更できません。

  • ベース テーブルに timestamp 列が含まれている場合は、更新できません。

  • 同一ビューまたはいずれかのメンバ テーブルとの自己結合がある場合は、更新できません。

DELETE ステートメント

DELETE ステートメントでは、パーティション ビューを介して 1 つ以上のメンバ テーブル内のデータが削除されます。同一ビューまたはいずれかのメンバ テーブルとの自己結合がある場合は、DELETE ステートメントを使用できません。