ALTER VIEW (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsMicrosoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウスMicrosoft Fabric の SQL データベース

以前に作成されたビューを変更します。 これにはインデックス付きビューが含まれます。 ALTER VIEW 依存するストアドプロシージャやトリガーには影響せず、権限も変更しません。

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 ]       
}   
-- Syntax for Azure Synapse Analytics and Microsoft Fabric
  
ALTER VIEW [ schema_name . ] view_name [  ( column_name [ ,...n ] ) ]   
AS <select_statement>   
[;]  

引数

schema_name
ビューが所属するスキーマの名前を指定します。

view_name
変更するビューを指定します。

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

重要

カラム権限は、カラムが実行される前後で同じ名前を持つ場合にのみ維持 ALTER VIEW 。

注意

ビューの列では、基になるデータのソースに関係なく、列名のアクセス許可が CREATE VIEW または ALTER VIEW ステートメントに適用されます。 例えば、文のCREATE VIEW列に権限が付与されている場合、ALTER VIEW文はSalesOrderID列をOrderRefなどにリネームし、SalesOrderIDを使ってビューに関連付けられた権限を保持できます。

ENCRYPTION
適用対象: SQL Server 2008 (10.0.x) 以降と Azure SQL Database。

ステートメントのテキストを含む ALTER VIEW 内のエントリを暗号化します。 WITH ENCRYPTION を指定すると、そのビューを SQL Server レプリケーションの一部としてパブリッシュできなくなります。

SCHEMABINDING
基になるテーブルのスキーマにビューをバインドします。 SCHEMABINDING を指定すると、ビュー定義に影響する変更をベース テーブルに加えられなくなります。 まずビュー定義を変更または削除して、変更するテーブルとの依存関係を解消する必要があります。 SCHEMABINDING を使用する場合は、select_statement に、参照されるテーブル、ビュー、またはユーザー定義関数の名前として、2 つの部分から構成される名前 (schema.object) を指定する必要があります。 参照されるオブジェクトは、すべて同じデータベース内にあることが必要です。

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

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

VIEW_METADATA で作成したビューの場合、ブラウズ モード メタデータでは結果セット内のビューの列の説明で、ベース テーブル名ではなくビュー名が返されます。

WITH VIEW_METADATAを使ってビューを作成する場合、 タイムスタンプ の列を除くすべての列は、トリガーの代わりに INSERT または UPDATE であれば更新可能です。 詳細については、 CREATE VIEW (Transact-SQL)のコメント欄をご覧ください。

AS
ビューが行うアクションです。

select_statement
ビューを定義している SELECT ステートメントを指定します。

チェックオプション付き
ビューに対して実行されるすべてのデータ変更ステートメントについて、select_statement 内で設定される条件に従うよう強制します。

解説

ALTER VIEWの詳細については、CREATE VIEW(Transact-SQL)のコメントをご覧ください。

注意

前のビュー定義がWITH ENCRYPTIONまたはCHECK OPTIONを使って作成された場合、これらのオプションは ALTER VIEWに含まれる場合にのみ有効になります。

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

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

アクセス許可

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

例

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

USE AdventureWorks2022;  
GO  
CREATE VIEW HumanResources.EmployeeHireDate  
AS  
SELECT p.FirstName, p.LastName, e.HireDate  
FROM HumanResources.Employee AS e JOIN Person.Person AS  p  
ON e.BusinessEntityID = p.BusinessEntityID ;  
GO  

2002 年より前に雇用された従業員のみを含むようにビューを変更する必要があります。 ALTER VIEWが使われず、代わりにビューが削除されて再作成された場合、以前に使用したGRANT文およびこのビューに関する権限に関する他の文を再度入力しなければなりません。

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