次の方法で共有


ALTER VIEW (Transact-SQL)

以前に作成されたビューを変更します。これにはインデックス付きビューが含まれます。ALTER VIEW は、従属するストアド プロシージャやトリガに影響を与えず、権限を変更することもありません。ALTER VIEW ステートメントで使用されるパラメータの詳細については、「CREATE VIEW (Transact-SQL)」を参照してください。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

ALTER VIEW [ schema_name . ] view_name [ ( column [ ,...n ] ) ] 
[ WITH <view_attribute> [ ,...n ] ] 
AS select_statement 
[ WITH CHECK OPTION ] [ ; ]

<view_attribute> ::= 
{ 
    [ ENCRYPTION ]
    [ SCHEMABINDING ]
    [ VIEW_METADATA ]     
} 

引数

  • schema_name
    ビューが属しているスキーマの名前を指定します。
  • view_name
    変更するビューを指定します。
  • column
    指定したビューに含まれている列の名前を 1 つ以上指定します。列を複数指定するときは、コンマで区切ります。

    ms173846.note(ja-jp,SQL.90).gif重要 :
    列の権限は、ALTER VIEW の実行の前後で列の名前が変わらないときだけ維持されます。
    ms173846.note(ja-jp,SQL.90).gifメモ :
    ビューの列では、列名に対する権限は、基底となるデータのソースがどこにあるかにかかわらず、CREATE VIEW ステートメントまたは ALTER VIEW ステートメントを超えて適用されます。たとえば、CREATE VIEW ステートメントで SalesOrderID 列に対して権限が与えられる場合、ALTER VIEW ステートメントは SalesOrderID 列の名前を OrderRef などに変更でき、その後も SalesOrderID を使用してビューに関連付けられた権限を保持します。
  • ENCRYPTION
    ALTER VIEW ステートメントのテキストを含んでいる sys.syscomments エントリを暗号化します。WITH ENCRYPTION を指定すると、そのビューを SQL Server レプリケーションの一部としてパブリッシュできなくなります。
  • SCHEMABINDING
    基になるテーブルのスキーマにビューをバインドします。SCHEMABINDING を指定すると、ビュー定義に影響する変更をベース テーブルに加えられなくなります。まずビュー定義を変更または削除して、変更するテーブルとの依存関係を解消する必要があります。SCHEMABINDING を使用する場合は、select_statement に、参照されるテーブル、ビュー、またはユーザー定義関数の名前として、2 つの部分から構成される名前 (schema**.**object) を指定する必要があります。参照されるオブジェクトは、すべて同じデータベース内にあることが必要です。

    SCHEMABINDING 句を指定して作成されたビューが削除または変更されて、スキーマ バインドがなくならない限り、そのビューに参加しているビューまたはテーブルは削除できません。スキーマ バインドが残っている場合は、Microsoft SQL Server 2005 データベース エンジンからエラーが返されます。また、ビュー定義に影響を与える ALTER TABLE ステートメントを、スキーマ バインドを持つビューに参加しているテーブルに対して実行すると、ステートメントは失敗します。

    ビューに別名データ型の列が含まれている場合は、SCHEMABINDING を指定できません。

  • VIEW_METADATA
    ビューを参照するクエリ用にブラウズ モード メタデータが要求されている場合、SQL Server のインスタンスは、ベース テーブルではなく、ビューに関するメタデータ情報を DB-Library、ODBC、および OLE DB API に返します。ブラウズ モード メタデータとは、データベース エンジンのインスタンスがクライアント側の DB-Library、ODBC、および OLE DB API に返す追加のメタデータです。このメタデータによって、クライアント側の API では、更新可能なクライント側カーソルを実装できます。ブラウズ モード メタデータには、結果セット内の列が属するベース テーブルの情報が含まれています。

    VIEW_METADATA を指定して作成されたビューの場合、ブラウズ モード メタデータは、結果セット内のビューの列を記述する際にベース テーブル名ではなくビュー名を返します。

    WITH VIEW_METADATA を指定して作成されたビューに INSERT または UPDATE での INSTEAD OF トリガが含まれている場合、そのビューでは、timestamp 列を除くすべての列を更新できます。詳細については、「CREATE VIEW (Transact-SQL)」の「解説」を参照してください。

  • AS
    ビューが行う動作を指定します。
  • select_statement
    このビューを定義している SELECT ステートメントを指定します。
  • WITH CHECK OPTION
    ビューに対して実行されるすべてのデータ変更ステートメントに対して、select_statement 内で設定された条件に従うよう、強制します。

解説

ALTER VIEW の詳細については、「CREATE VIEW (Transact-SQL)」の「解説」を参照してください。

ms173846.note(ja-jp,SQL.90).gifメモ :
以前のビュー定義が WITH ENCRYPTION または CHECK OPTION を使用して作成されている場合、これらのオプションは、ALTER VIEW で指定される場合にのみ有効となります。

現在使用されているビューを ALTER VIEW を使用して変更する場合、データベース エンジンはビューに対して排他スキーマ ロックを設定します。ロックが許可され、ビューのアクティブ ユーザーがいなくなると、データベース エンジンはプロシージャ キャッシュからビューのすべてのコピーを削除します。ビューを参照している既存のプランはキャッシュに残りますが、呼び出されると再コンパイルされます。

ALTER VIEW は、インデックス付きビューに適用できますが、そのビューのすべてのインデックスを無条件で削除します。

権限

ALTER VIEW を実行するには、少なくとも OBJECT に対する ALTER 権限が必要です。

次の例では、すべての従業員とその雇用日を含んだ EmployeeHireDate というビューを作成します。ビューには権限が与えられますが、必要条件が変更されて、雇用日が特定の日付よりも古い従業員を選択することになりました。そこで、ALTER VIEW を使用してビューを変更します。

USE AdventureWorks ;
GO
CREATE VIEW HumanResources.EmployeeHireDate
AS
SELECT c.FirstName, c.LastName, e.HireDate
FROM HumanResources.Employee AS e JOIN Person.Contact AS c
ON e.ContactID = c.ContactID ;
GO

1997 年より前に雇用された従業員のみを含むようにビューを変更する必要があります。ALTER VIEW を使用せずに、ビューを削除して再作成する場合は、以前に使用されていた GRANT ステートメント、およびこのビューに関係する権限を処理するその他すべてのステートメントを再入力する必要があります。

ALTER VIEW HumanResources.EmployeeHireDate
AS
SELECT c.FirstName, c.LastName, e.HireDate
FROM HumanResources.Employee AS e JOIN Person.Contact AS c
ON e.ContactID = c.ContactID
WHERE HireDate < CONVERT(DATETIME,'19980101',101) ;
GO

参照

関連項目

CREATE TABLE (Transact-SQL)
CREATE VIEW (Transact-SQL)
DROP VIEW (Transact-SQL)
SELECT (Transact-SQL)
EVENTDATA (Transact-SQL)

その他の技術情報

ストアド プロシージャの作成 (データベース エンジン)
オブジェクト名としての識別子の使用
パブリケーション データベースでのスキーマの変更

ヘルプおよび情報

SQL Server 2005 の参考資料の入手