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

时间:2019-03-04 01:30:20

标签: sql sql-server view ssms sql-view

我可以在SSMS的“查询”标签中写这个:

pip

如果我将其写为“创建视图”:

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 ISBN, Title AS Title
    FROM dbo.tBook
    ORDER BY Title, ISBN

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

1 个答案:

答案 0 :(得分:3)

这有点长,可以发表评论。你说:

  

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

那是真的。如果基础列名称更改,则该视图将无效。该代码将不再起作用。您仍然需要重新创建视图。

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

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

我通常不是这种方法的真正忠实拥护者-在为视图添加或重新排列视图的列名时,它可能会造成严重破坏。但是您可能会感激的。

请注意,我删除了ORDER BYTOP 100 PERCENT。这些是使SQL Server编译器接受ORDER BY的技巧。这并不意味着该视图可以保证按任何特定顺序排列。

documentation中对此进行了明确的解释:

  

重要

     

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