我可以在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
我想使用原始名称为存储视图中的名称加上别名,以保持一定的一致性,但是如果基础表列名称确实发生更改,则视图的用户将不必编辑其代码。
答案 0 :(得分:3)
这有点长,可以发表评论。你说:
如果基础表的列名确实发生更改,则视图的用户将不必编辑其代码
那是真的。如果基础列名称更改,则该视图将无效。该代码将不再起作用。您仍然需要重新创建视图。
如果要确保列名,可以使用列名明确创建视图 :
Create view vBook1 (ISBN, Title) AS
SELECT ISBN, Title
FROM dbo.tBook;
我通常不是这种方法的真正忠实拥护者-在为视图添加或重新排列视图的列名时,它可能会造成严重破坏。但是您可能会感激的。
请注意,我删除了ORDER BY
和TOP 100 PERCENT
。这些是使SQL Server编译器接受ORDER BY
的技巧。这并不意味着该视图可以保证按任何特定顺序排列。
documentation中对此进行了明确的解释:
重要
ORDER BY子句仅用于确定视图定义中的TOP或OFFSET子句返回的行。 查询视图时,ORDER BY子句不保证结果有序,除非在查询本身中也指定了ORDER BY。