Одна из причин не использовать представления, которые могут быть или не быть действительными ... заключается в том, что они могут создавать сложности там, где их нет
Например, я мог бы написать
CREATE VIEW foo as <SOME COMPLEX QUERY>
потом я смогу написать
CREATE Procedure UseFoo as
BEGIN
SELECT
somefields
FROM
x
INNER JOIN foo
.....
Итак, теперь я создаю объекты, которые необходимо развернуть, поддерживать, контролировать версии и т. Д. *
Или я мог написать либо
CREATE Procedure UseFoo as
BEGIN
WITH foo as (<SOME COMPLEX QUERY>)
SELECT
somefields
FROM
x
INNER JOIN foo
.....
или
CREATE Procedure UseFoo as
BEGIN
SELECT
somefields
FROM
x
INNER JOIN <SOME COMPLEX QUERY> foo
.....
И теперь мне нужно только развернуть, поддерживать и контролировать версии одного объекта.
Если <SOME COMPLEX QUERY>
существует только в одном контексте, поддержание двух отдельных объектов создает ненужную нагрузку. Также после развертывания любые изменения требуют оценки вещей, которые зависят от UseFoo
. При двух объектах вам нужно посетить все, что оценивается по UseFoo
и Foo
Конечно, с другой стороны, если Foo
представляет некоторую общую логику, оценка все равно требуется, но вам нужно только найти и изменить один объект.