SQL Server View показывает устаревшие / неправильные данные после изменения основных зависимостей - PullRequest
8 голосов
/ 17 декабря 2008

У нас есть вид (назовем его X), который является базовым видом, вызываемым двумя другими видами (назовем их Y и Z).

Сегодня мы внесли изменения в представление X, после этого представления Y и Z начали возвращать неверные данные. Когда мы работали в Management Studio и запускали Select * from Y (именно так и вызывается представление в коде), получались неверные данные. Однако, когда мы запустили фактический SQL, который содержал представление, это было хорошо. Мы попробовали несколько вещей, пока коллега не предложил добавить пробел для просмотра X и Z и затем запустить Alter, что сработало. Все вернулось на круги своя.

Мой вопрос: кеширует ли MSSQL свои представления? и если да, то как вы заставляете их не ИЛИ заставлять их пересобирать?

Кроме того, любое дополнительное чтение по этому поводу было бы полезно.

Ответы [ 2 ]

10 голосов
/ 17 декабря 2008

См. Команду sp_refreshview .

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

8 голосов
/ 17 декабря 2008

SQL Server не кэширует данные представления (по крайней мере, не так, как вы на них ссылаетесь).

Если определение представления содержит «SELECT *», то фактический список столбцов определяется при создании представления, то есть «SELECT *» заменяется фактическим списком столбцов, который существует на момент создания представления. Это означает, что если вы добавите столбцы в базовые таблицы, на которые ссылается это представление, они не появятся в представлении.

...