次の方法で共有


sp_refreshview (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

指定された非スキーマ バインド ビューのメタデータを更新します。 ビューが依存する基になるオブジェクトが変更されたため、ビューの永続的なメタデータが古くなる可能性があります。

Transact-SQL 構文表記規則

構文

sp_refreshview [ @viewname = ] 'viewname'
[ ; ]

引数

[ @viewname = ] 'viewname'

ビューの名前です。 @viewnamenvarchar で、既定値はありません。 @viewname マルチパート識別子を指定できますが、現在のデータベース内のビューのみを参照できます。

リターン コードの値

0 (成功) または 0 以外の数値 (失敗)。

解説

SCHEMABINDING を使用してビューを作成しない場合は、ビューの定義に影響を与えるビューの基になるオブジェクトに変更を加えたときに、 sp_refreshview を実行する必要があります。 それ以外の場合、クエリを実行すると、ビューによって予期しない結果が生成される可能性があります。

アクセス許可

ビューに対する ALTER 権限と、共通言語ランタイム (CLR) ユーザー定義型およびビュー列で参照される XML スキーマ コレクションに対する REFERENCES 権限が必要です。

A. ビューのメタデータを更新する

次の例では、ビュー Sales.vIndividualCustomer のメタデータを更新します。

USE AdventureWorks2022;
GO

EXECUTE sp_refreshview N'Sales.vIndividualCustomer';

B. 変更されたオブジェクトに依存するすべてのビューを更新するスクリプトを作成する

テーブル Person.Person に対して作成された任意のビューの定義に影響を与える形で、このテーブルが変更されたとします。 次の例では、テーブル Person.Person に対する依存関係があるすべてのビューについて、メタデータを更新するスクリプトを作成しています。

USE AdventureWorks2022;
GO
SELECT DISTINCT 'EXEC sp_refreshview ''' + name + ''''
FROM sys.objects AS so
INNER JOIN sys.sql_expression_dependencies AS sed
    ON so.object_id = sed.referencing_id
WHERE so.type = 'V' AND sed.referenced_id = OBJECT_ID('Person.Person');