很多地方都没解释清楚这个问题,有代表性的就是这个 博客 。
论坛 上有人解释了,但是年代久远,我这里把它捞出来。答主是 这位 。内容如下:
创建排序视图的企图本身就是错误的,因为视图表示一个表,而表是不会对行排序的。众所周知,在SQL Server 2000中追求排序视图的开发人员会利用貌似系统漏洞的一个技巧。
利用这个漏洞可以创建一个非常可笑的视图,在该视图中,指定TOP 100 PERCENT以及一个ORDER BY子句,就像这样:
ALTER VIEW dbo.VcustsWithOrders
AS
SELECT TOP (100) PERCENT
Country, CustomerID, CompanyName, ContactName, ContactTitle,
Address, City, Region, PostalCode, Phone, Fax
FROM Customers AS C
WHERE EXISTS
(SELECT * FROM dbo.Orders AS O
WHERE O.CustomerID = C.CustomerID)
ORDER BY Country;
GO
这些语句最终的执行结果有两列 country ,怎么排序呢?会引起混乱。视图不允许排序的根源就是在后续处理中会引起混乱,不能用 distinct 应该也一样。总之,把视图当成基本表来约束就很安全。
还有一个例子是从 StackExchange (链接)来的:
If a view was allowed to be sorted then what should be the order of the result here?
CREATE VIEW dbo.V1
AS
SELECT number
FROM SomeTable
ORDER BY number ASC
GO
CREATE VIEW dbo.V2
AS
SELECT number
FROM SomeTable
ORDER BY number DESC
GO
SELECT *
FROM dbo.V1
JOIN dbo.V2
ON V1.number = V2.number
————————————————
版权声明:本文为CSDN博主「0XIX0」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ddzr972435946/article/details/102814602