我试图通过一个视图来操作order by,以按Asc而不是Desc排序。在视图的查询本身中,它没有order by,但当我查看此视图的成本计划时,它似乎默认按ServiceCallID Desc排序,这是我不想要的。order by字段所来自的表在视图中是按desc排序的,但是表上确实有一个聚集索引,而且是按Asc顺序排序的,我假设这就是为什么视图的这种排序成本是36%的原因。我正在努力降低这一成本,因此查询等待时间将少于当前的等待时间。
当我尝试通过在Asc order中添加order by来更改视图时,如果希望更改order by,则会给出错误消息“数据库中已有一个命名的对象”。
当我尝试更改此视图时,为什么会收到此错误消息?另外,有没有办法让我更改这个视图的默认排序依据,这样我就可以让它按升序排列,而不是默认的降序排列?
SELECT TOP (100) PERCENT dbo.ServiceCalls.ServiceCallID, dbo.Contracts.ContractID, dbo.Contracts.Area, dbo.Jobs.JobName, dbo.Customers.CustomerName, dbo.Contracts.ContractType
FROM dbo.Customers WITH (READPAST) INNER JOIN
dbo.Jobs WITH (READPAST) ON dbo.Customers.CustomerID = dbo.Jobs.CustomerID INNER JOIN
dbo.Contracts WITH (READPAST) ON dbo.Jobs.JobID = dbo.Contracts.JobID INNER JOIN
dbo.ServiceCalls WITH (READPAST) ON dbo.Contracts.ContractID = dbo.ServiceCalls.ContractID
WHERE (dbo.ServiceCalls.ScheduleDate > DATEADD(day, 0, GETDATE() - 500))
select
object_name(m.object_id), m.*
from
sys.sql_modules m
where
m.definition like N'%vwMainCboServiceCallID%'
发布于 2016-07-19 21:19:37
等一下,我不知道为什么您不能保存查询,但我也不是很确定您正在尝试做什么,以及您正尝试在GUI中的什么位置保存查询……
然而,您一直提到您正在寻找为什么他们的ORDER BY
是在Execution Plan
中而不是在View Definition
中。Execution Plan
显示了某人从视图中选择的SQL语句,并添加了一条ORDER BY
语句。它没有显示定义视图本身的select语句,在您的例子中,它没有ORDER BY
语句。
CREATE VIEW dbo.View1
AS
SELECT *
FROM
这是一个视图定义
然后有人使用该视图并可以执行以下操作
SELECT *
FROM
dbo.View1
在执行计划中没有命令,但如果他们这样做了:
SELECT *
FROM
dbo.View1
ORDER BY
SomeColumn
现在执行计划中将包含一个order by。
那么你的执行计划的来源是什么呢?
发布于 2016-07-19 22:04:36
在access数据库中,我们在Row Source中有一个字段调用此视图。因此,我进入Row Source并取出order by,因为它已经按升序排序。我很困惑,因为我不知道SSMS会在MS Access中显示查询的执行计划。现在我知道了。感谢您的帮助和时间。
https://stackoverflow.com/questions/38467887
复制相似问题