Share via


sp_refreshview (Transact-SQL)

更新指定非結構描述繫結檢視的中繼資料。檢視所依賴的基礎物件變更之後,檢視的保存中繼資料也可能會過期。

主題連結圖示Transact-SQL 語法慣例

語法

sp_refreshview [ @viewname = ] 'viewname' 

引數

  • [ @viewname= ] 'viewname'
    這是檢視的名稱。viewname 是 nvarchar,沒有預設值。viewname 可以是多部份組成的識別碼,但只能是目前資料庫中的檢視。

傳回碼值

0 (成功) 或非零值 (失敗)

備註

如果未以 schemabinding 來建立檢視,當影響檢視定義的檢視之下的物件有變更時,就應該執行 sp_refreshview。否則,在查詢檢視時,可能會產生非預期的結果。

權限

必須對檢視具備 ALTER 權限,以及對檢視資料行所參考的 Common Language Runtime (CLR) 使用者自訂類型和 XML 結構描述集合,具備 REFERENCES 權限。

範例

A. 更新檢視的中繼資料

下列範例會重新整理 Sales.vIndividualCustomer 檢視的中繼資料。

USE AdventureWorks2008R2;
GO
EXECUTE sp_refreshview N'Sales.vIndividualCustomer';

B. 建立可更新所有對於已變更物件具有相依性之檢視的指令碼

假設資料表 Person.Person 是以會影響在任何檢視上建立的定義之方式來變更。下列範例建立了一個指令碼,針對所有對資料表 Person.Person 有相依性的檢視來重新整理中繼資料。

USE AdventureWorks2008R2;
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');