Поделиться через


sp_refreshview (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Обновляет метаданные для заданного, не привязанного к схеме, представления. Постоянные метаданные представления могут устареть вследствие изменения базовых объектов, от которых зависит представление.

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Аргументы

[ @viewname = ] 'viewname'

Имя представления. @viewname — nvarchar без значения по умолчанию. @viewname может быть многопартийным идентификатором, но может ссылаться только на представления в текущей базе данных.

Значения кода возврата

0 (успешно) или ненулевое число (сбой).

Замечания

Если представление не создается с помощью SCHEMABINDING, sp_refreshview следует запустить при внесении изменений в объекты, лежащие в основе представления, которые влияют на определение представления. В противном случае представление может привести к непредвиденным результатам при запросе.

Разрешения

Требуются разрешение ALTER для представления и разрешение REFERENCES для определяемых пользователями типов данных среды CLR и коллекций XML-схем, на которые ссылаются столбцы представления.

Примеры

А. Обновление метаданных представления

В следующем примере выполняется обновление метаданных представления 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');