相关疑难解决方法(0)

将 SQL Server 2000 数据库升级到 SQL Server 2008 后,视图未按列分组排序

我有两张桌子

  • 位置大师( [LocatioNo],[LocationName],[Description])
  • 位置数据( [LocationNo],[LocationCode],[DDate],[BillNo],[Model],[Quantity],[SNo])

表格内容
(来源:staticflickr.com
](http://www.flickr.com/photos/77377790@N08/6782618850 “点击查看Flickr”)

以及涉及在 SQL Server 2000 中创建的 2 个表的视图

CREATE VIEW [dbo].[QueryLocation]
AS
  SELECT TOP (100) PERCENT 
       dbo.LocationData.LocationNo, dbo.LocationData.LocationCode, 
       dbo.LocationData.DDate, dbo.LocationData.BillNo, 
       dbo.LocationData.Model,              
       SUM(dbo.LocationData.Quantity) AS Quantity, 
       dbo.LocationMaster.LocationName
  FROM 
       dbo.LocationData 
  INNER JOIN 
       dbo.LocationMaster ON dbo.LocationData.LocationNo = dbo.LocationMaster.LocatioNo 
  GROUP BY 
       dbo.LocationMaster.LocationName, dbo.LocationData.LocationNo, 
       dbo.LocationData.LocationCode, dbo.LocationData.DDate, dbo.LocationData.BillNo, 
       dbo.LocationData.Model ORDER BY dbo.LocationData.BillNo
Run Code Online (Sandbox Code Playgroud)

在 SQL Server 2000 中执行以下查询时,网格中的结果按billno列排序。

SELECT *  FROM QueryLocation
Run Code Online (Sandbox Code Playgroud)

查询结果
(来源:staticflickr.com
](http://www.flickr.com/photos/77377790@N08/6782618858 “点击查看 Flickr”)

升级到 SQL Server …

sql-server-2008 sql-server

5
推荐指数
3
解决办法
2015
查看次数

您期望特定顺序的所有查询都应该包含 ORDER BY 子句吗?

为了更好地理解 SQL Server 查询处理器,我一直在思考ORDER BY子句是如何工作的,以及 SQL Server 如何提供结果。

对于任何给定的数据集,SQL Server 似乎将以完全相同的顺序提供结果,这些数据集保持不变并且永远不会改变。一旦您引入任何类型的不确定性,例如开发人员更改某些内容,就不能再期望结果的顺序是相同的。

简单地以相同的顺序查看结果,每次按下F5并不能保证您期望的结果。

尝试这个:

USE TempDB;
DROP TABLE TestOrderBy;
DROP TABLE TestOrderBy2;
CREATE TABLE TestOrderBy
(
    ID INT NOT NULL CONSTRAINT PK_TestOrderBy PRIMARY KEY CLUSTERED IDENTITY(1,1)
    , SomeData varchar(255)
);
INSERT INTO TestOrderBy (SomeData) VALUES ('E');
INSERT INTO TestOrderBy (SomeData) VALUES ('D');
INSERT INTO TestOrderBy (SomeData) VALUES ('C');
INSERT INTO TestOrderBy (SomeData) VALUES ('B');
INSERT INTO TestOrderBy (SomeData) VALUES ('A');

CREATE TABLE TestOrderBy2
(
    ID INT NOT …
Run Code Online (Sandbox Code Playgroud)

sql-server order-by

3
推荐指数
1
解决办法
237
查看次数

聚集索引和排序

select *
from [table_a];
Run Code Online (Sandbox Code Playgroud)

聚集索引根据您选择的列对表进行排序。

话虽这么说,如果我有一个聚集索引[column_a], [column_b],[column_c]从上面运行相同的查询,那么数据是否总是根据该顺序返回排序,因为这是创建聚集索引的顺序?

更多说明:

如果我ORDER BY在索引中没有的内容上添加一个子句,执行计划将有一个排序运算符。

如果我对ORDER BY聚集索引中使用的所有列都有一个子句,则执行计划将不会有排序运算符。

这就是我首先问这个问题的原因。

index sql-server clustered-index t-sql

-1
推荐指数
1
解决办法
670
查看次数