Зачем обновлять представление базы данных в нашем приложении? - PullRequest
1 голос
/ 24 сентября 2019

У нас есть генератор отчетов, который состоит из вложенных представлений для предотвращения избыточного кода.Мы обнаружили, что в некоторых ситуациях нам необходимо «обновить» представления более высокого уровня (используя sp_refreshview) после редактирования представления более низкого уровня.Если мы этого не сделаем, поля будут возвращать данные из неправильных полей во вложенном представлении.

Почему это так?Руководитель нашей команды предположил, что, возможно, это потому, что у нас есть несколько областей в старых представлениях, где использовалось select * (если быть честным, их около 200).Может ли это быть причиной или есть что-то еще, что мы можем делать неправильно?

Наша база данных - MSSQL.

1 Ответ

3 голосов
/ 24 сентября 2019

Представления создаются с определениями схемы, которые не обновляются без обновления самого представления.Поэтому обновление базовых таблиц / представлений, которые вызывают любые изменения схемы, потребует обновления основного представления, чтобы обновить схему представления.Это все еще может быть правдой, даже если логика в главном представлении остается правильной, потому что схема, лежащая в основе этого, неверна и нуждается в обновлении.

Вы можете создавать свои представления с помощью SCHEMABINDING, что предотвратит изменения влежащие в основе объекты, пока представление существует, и, таким образом, напоминает «принудительное напоминание» обновить ваш вид (поскольку вам придется сначала изменить его или отбросить, а затем воссоздать его после внесения этих базовых изменений).В качестве альтернативы вы можете продолжить обновлять представление после внесения изменений.Оба достигают одного и того же конечного результата.

Для меня решение о том, какой подход использовать, будет зависеть от того, насколько оно будет эффективным, если кто-то внесет базовое изменение, а представление не обновится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...