說明:意外的分頁結果與ORDER BY [Column A ] ASC OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY.If [Column A ]
具有相同的值。獲取意外結果:ORDER BY [ColumnName] ASC OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY
注:我使用SQL Server 2012點快速
條件:
使用表達式:
ORDER BY [Column A] ...
[A列]:所有行具有相同的值。
試製:
案例1:
SELECT [Id],[Date]
FROM [TestDateoffset]
ORDER BY [Date] ASC
OFFSET 0 ROWS
當前的結果:
Id Date
---------------------------------------
1 2015-01-24 21:40:30.0441628 +07:00
2 2015-01-24 21:40:30.0441628 +07:00
3 2015-01-24 21:40:30.0441628 +07:00
4 2015-01-24 21:40:30.0441628 +07:00
預期結果:
Id Date
-----------------------------------
1 2015-01-24 21:40:30.0441628 +07:00
2 2015-01-24 21:40:30.0441628 +07:00
3 2015-01-24 21:40:30.0441628 +07:00
4 2015-01-24 21:40:30.0441628 +07:00
狀態:PASS
案例2:
SELECT [Id],[Date]
FROM [TestDateoffset]
ORDER BY [Date] ASC
OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY
實際結果:
Id Date
---------------------------------------
2 2015-01-24 21:40:30.0441628 +07:00
預期結果:
Id Date
---------------------------------------
1 2015-01-24 21:40:30.0441628 +07:00
種
狀態:失敗
案例3:
SELECT [Id],[Date]
FROM [TestDateoffset]
ORDER BY [Date] ASC
OFFSET 1 ROWS FETCH FIRST 1 ROWS ONLY
實際結果:
Id Date
---------------------------------------
2 2015-01-24 21:40:30.0441628 +07:00
預期結果:
它有不同,以:
Id Date
---------------------------------------
2 2015-01-24 21:40:30.0441628 +07:00
種
狀態:失敗
結果總是相同的,如果我跑OFFSET 1行,或者OFFSET 2行,..:
Id Date
---------------------------------------
2 2015-01-24 21:40:30.0441628 +07:00
我的問題:
這是一個錯誤嗎?
案例2案例3:它是如何工作的?爲什麼我總是獲得第二張唱片?
我覺得背後"ORDER BY COLUMN ASC"
和"ORDER BY COLUMN ASC OFFSET 0 ROWS FETCH FIRST 1"
的"order"
過程是不同的。但我不知道爲什麼和什麼是規則!
感謝您的及時回覆。所以,我必須在每個分頁查詢中爲我的ORDER添加「Id」,以確保我能得到預期的結果。我認爲這不是一個好習慣! – hungdoan 2015-04-04 10:52:19
這是一個錯誤?因爲'SQL Server可以以任何順序返回行'是的,但至少它必須是穩定的,它必須有一個規則(按行鍵索引排序,..)。 例如:'OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY'和'OFFSET 2 ROWS FETCH FIRST 1 ROWS ONLY'無法在邏輯上返回相同的結果。 – hungdoan 2015-04-04 10:55:30
這不是一個錯誤。您正在詢問無序集合的第一行。 SQL Server可以給你一個隨機的行來滿足你的條件。爲了限制SQL Server的自由度,您必須更加具體,並指定一個排序順序,將每行排序在一個唯一的位置。 – Andomar 2015-04-04 11:00:02