Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 SQL order by和左外联接不';我没有正确的顺序_Sql Server 2005_Left Join_Sql Order By - Fatal编程技术网

Sql server 2005 SQL order by和左外联接不';我没有正确的顺序

Sql server 2005 SQL order by和左外联接不';我没有正确的顺序,sql-server-2005,left-join,sql-order-by,Sql Server 2005,Left Join,Sql Order By,我有一个视图,它连接两个表并按第一个表排序。只是顺序不对。它会丢失一个偶然的记录,然后在最后,这些记录中的大多数按顺序存在,然后在最后,其余的记录按顺序存在。所以它有这样的记录 1 (most of the records in order) 2 4 5 6 7 8 10 11 13 15 3 (the first set of missing records) 12 9 (the rest of the missing records) 14 我的观点如下。我需要在加入之前完成订单吗?我

我有一个视图,它连接两个表并按第一个表排序。只是顺序不对。它会丢失一个偶然的记录,然后在最后,这些记录中的大多数按顺序存在,然后在最后,其余的记录按顺序存在。所以它有这样的记录

1  (most of the records in order)
2
4
5
6
7
8
10
11
13
15
3  (the first set of missing records)
12
9 (the rest of the missing records)
14
我的观点如下。我需要在加入之前完成订单吗?我做错了什么?(我已经获得了这个视图,在另一个db实例中完全相同的视图可以正常工作。)


(编辑)排序字段的类型是[ID][int]notnull IDENTITY(1,1),

很可能这两台SQL Server的版本略有不同。对此有一个已知的修补程序:


阅读这里有一个修补程序,您必须在2000兼容模式下运行它才能工作。为什么不在从视图中选择时按顺序排序

我将从视图中完全删除ORDERBY子句。相反,请在查询视图时指定您的顺序。

博客条目中的一条注释将其解释得非常清楚

再一次,来自BOL的文本:

当在视图、内联函数、派生表或子查询的定义中使用ORDER BY时,该子句仅用于确定TOP子句返回的行。ORDER BY子句不保证在查询这些构造时结果是有序的,除非在查询本身中也指定了ORDER BY

尽管视图定义包含ORDER BY子句,但ORDER BY子句仅用于确定TOP子句返回的行。在查询视图本身时,SQL Server不保证结果将被排序,除非您明确指定,如以下查询所示:


您应该始终在最后一个可能的点“排序”,因为排序很慢(N log N)。在视图上执行select时,通常会包含where子句。您只想对结果集进行排序。

我不确定这里是否有足够的信息来回答您的问题。了解Table1和Table2的表定义,或者至少了解相关列的数据类型是很有用的。这是一个好主意——我会搞乱我的DTS(它使用视图),看看我是否可以这样解决它。啊哈!至少这是有道理的!
CREATE VIEW [dbo].[SampleView]
AS
SELECT     TOP 100 PERCENT blp.*, ISNULL(YEAR(DATEADD(month, 2, tb.[End of D&D])), 0) AS DEMO_FY
FROM         dbo.Table1 AS blp LEFT OUTER JOIN
                      dbo.Table2 AS tb ON blp.FACIL_NAME = tb.[Structure ID]
ORDER BY blp.ID
SELECT * FROM TopView
ORDER BY LastName