Why do alias names the same as the column names get dropped when stored as a view?(为什么将别名存储为视图时会删除与列名相同的别名?)
问题描述
我可以在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
。这些是使ORDER BY
被SQL Server编译器接受的黑客攻击。这并不意味着可以保证视图按任何特定顺序排列。
这在documentation:
中有非常明确的解释重要信息
ORDER BY子句仅用于确定视图定义中TOP或OFFSET子句返回的行。除非在查询本身中还指定了ORDER BY,否则ORDER BY子句不保证在查询视图时得到有序结果。
这篇关于为什么将别名存储为视图时会删除与列名相同的别名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:为什么将别名存储为视图时会删除与列名相同的别名?


- 导入具有可变标题的 Excel 文件 2021-01-01
- 更改自动增量起始编号? 2021-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- SQL 临时表问题 2022-01-01