2

2 つのテーブルを結合し、最初のテーブルで並べ替えるビューがあります。順序が正しくないことを除いて。ときどきレコードが欠落し、最後にそれらのレコードのほとんどが順番に存在し、その最後に残りのレコードが順番に存在します。などの記録がありますので、

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 インスタンスのまったく同じビューが正しく機能します。)

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

(編集) ソートフィールドの型は [ID] [int] NOT NULL IDENTITY(1, 1),

4

5 に答える 5

2

このブログエントリのコメントは、それをかなり明確にします。

もう一度 BOL からのテキスト:

「ビュー、インライン関数、派生テーブル、またはサブクエリの定義で ORDER BY を使用する場合、句は TOP 句によって返される行を決定するためにのみ使用されます。ORDER BY 句は、これらの構文がただし、クエリ自体で ORDER BY も指定されている場合を除きます。"

「ビュー定義には ORDER BY 句が含まれていますが、その ORDER BY 句は、TOP 句によって返される行を決定するためにのみ使用されます。ビュー自体をクエリする場合、明示的に指定しない限り、SQL Server は結果が順序付けられることを保証しません。 、次のクエリに示すように:

SELECT * FROM TopView
ORDER BY LastName

"

于 2009-01-20T17:05:35.710 に答える
2

「SQL Server 2005 および SQL Server 2008 で並べ替えられたビューを作成する」を参照してください。修正プログラムがあり、それを機能させるには 2000 互換モードで実行する必要があります。ビューから選択するときに、順番を指定しないのはなぜですか?

于 2009-01-20T16:46:07.293 に答える
2

ビューから ORDER BY 句を完全に削除します。代わりに、ビューを照会するときに順序を指定してください。

于 2009-01-20T16:47:52.003 に答える
1

ほとんどの場合、2 つの SQL Server はわずかに異なるバージョンです。これには既知の修正プログラムがあります。

http://support.microsoft.com/kb/926292/

于 2009-01-20T16:43:24.693 に答える
1

ソートは遅い (N log N) ため、常に最後の可能なポイントで「順序付け」する必要があります。ビューで選択を実行するときは、通常、where 句を含めます。その結果セットのみをソートしたい。

于 2009-01-20T17:15:09.700 に答える