为什么将别名存储为视图时会删除与列名相同的别名?

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 BYTOP 100 PERCENT。这些是使ORDER BY被SQL Server编译器接受的黑客攻击。这并不意味着可以保证视图按任何特定顺序排列。

这在documentation:

中有非常明确的解释

重要信息

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

这篇关于为什么将别名存储为视图时会删除与列名相同的别名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)