为什么别名与列名存储为视图时相同?

问题描述 投票:2回答:1

我可以在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

我想使用原始名称对存储视图中的名称进行别名以保持一致性,但如果基础表列名称发生更改,则视图的用户将不必编辑其代码。

sql sql-server view ssms sql-view
1个回答
3
投票

评论有点长。你说:

如果基础表列名称确实发生更改,则视图的用户将不必编辑其代码

那是真的。如果基础列名称更改,则视图将失效。代码将不再有效。无论如何,您将需要重新创建视图。

如果要确保列名,可以使用列名显式创建视图:

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

我通常不是这种方法的忠实粉丝 - 它可能会在为视图添加或重新排列列名时造成严重破坏。但你可能会欣赏它。

请注意,我删除了ORDER BYTOP 100 PERCENT。这些是获取SQL Server编译器接受的ORDER BY的hacks。这并不意味着视图保证以任何特定顺序。

这在documentation中有明确的解释:

重要

ORDER BY子句仅用于确定视图定义中TOP或OFFSET子句返回的行。查询视图时,ORDER BY子句不保证有序结果,除非在查询本身中也指定了ORDER BY。

© www.soinside.com 2019 - 2024. All rights reserved.