sp_refreshview (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');