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