Почему псевдонимы, совпадающие с именами столбцов, удаляются при хранении в виде представления? - PullRequest
0 голосов
/ 04 марта 2019

Я могу написать это на вкладке запроса SSMS:

SELECT TOP (100) PERCENT ISBN AS ISBN, Title AS Title
FROM dbo.tBook
ORDER BY Title, ISBN

Если я напишу это как представление создания:

CREATE VIEW vBook1 
AS
    SELECT TOP (100) PERCENT ISBN AS ISBN, Title AS Title
    FROM dbo.tBook
    ORDER BY Title, ISBN

SSMS создаст представление но он удаляет псевдонимы, я полагаю, потому что псевдонимы такие же, как столбцы таблицы?

Конечно, я могу использовать разные псевдонимы, и это сохраняется в представлении:

CREATE VIEW vBook1 
AS
    SELECT TOP (100) PERCENT ISBN AS ISBNx, Title AS Titlex
    FROM dbo.tBook
    ORDER BY Title, ISBN

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

1 Ответ

0 голосов
/ 04 марта 2019

Это немного долго для комментария.Вы говорите:

если имена столбцов базовой таблицы меняются, пользователям представления не придется редактировать свой код

Что ж, это своего рода правда.Если базовые имена столбцов изменятся, то представление будет недействительным.Код больше не будет работать.В любом случае вам нужно будет заново создать представление.

Если вы хотите обеспечить имена столбцов, вы можете создать представление явно с именами столбцов:

Create view vBook1 (ISBN, Title) AS
    SELECT ISBN, Title
    FROM dbo.tBook;

Я обычно не очень большой поклонник этого подхода - он может нанести ущерб при добавлении или переупорядочении имен столбцов для представления.Но вы могли бы оценить это.

Обратите внимание, что я удалил ORDER BY и TOP 100 PERCENT.Это хаки для получения ORDER BY, принятого компилятором SQL Server.Это не означает, что представление гарантированно будет в каком-либо определенном порядке.

Это довольно подробно объяснено в документации :

Важно

Предложение ORDER BY используется только для определения строк, возвращаемых предложением TOP или OFFSET в определении представления. Предложение ORDER BY не гарантирует упорядоченные результаты при запросе к представлению , если только в запросе не указано ORDER BY.

...