我目前使用的是Sql Server 2014 Professional,當前版本是(12.0.4100)。我有一個視圖,我想要選擇具有特定偏移量的10行。
我的看法是象下面這樣:在Sql Server 2014 ORDER BY子句與OFFSET FETCH NEXT返回奇怪的結果
BeginTime | EndTime | Duration | Name
09:00:00.0000000|16:00:00.0000000| 1 | some_name1
09:00:00.0000000|16:00:00.0000000| 2 | some_name2
09:00:00.0000000|16:00:00.0000000| 3 | some_name3
09:00:00.0000000|16:00:00.0000000| 4 | some_name4
09:00:00.0000000|16:00:00.0000000| 5 | some_name5
09:00:00.0000000|16:00:00.0000000| 6 | some_name6
09:00:00.0000000|16:00:00.0000000| 7 | some_name7
有100行這樣的,所有在BeginTime
和EndTime
值完全相同。相關表格中的持續時間從1增加到100。
如果只是查詢:
SELECT * FROM View_Name
ResultSet是正確的。我可以通過檢查持續時間欄來了解它。
如果我只想從0開始讀取10行,那麼ResultSet是正確的,並且從18開始是正確的。當我想從19或19以上開始讀取10行時,ResultSet中的Duration返回不相關的結果像持續時間逆轉。但它永遠不會返回它具有持續的行超過11 我用瞭如下獲取特定行查詢:
SELECT * FROM View_Name ORDER BY BeginTime ASC OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY
也有一些奇怪的事情在這種情況下,如果我指定USE master
,則此問題消失,但如果指定USE [mydb_name]
,則問題再次出現。
順便說一句,我在本地PC中使用SQL SERVER 2014 Professional v(12.0.2269),這個問題因上述情況而消失。
PS:我無法使用USE master
,因爲我正在動態創建並列出視圖,並將其存儲在「存儲過程」中。
任何幫助,回答或評論都將被接受。
謝謝!
感謝響應,我希望你認真閱讀問題。 –
請澄清什麼是正確的,不正確的,我假設與第一個查詢你得到正確的結果(這也是沒有guranteed,除非你有一個外部訂單)和偏移量和取得你不相同。 – TheGameiswar
'SELECT * FROM View_Name ORDER BY BeginTime ASC'返回正確的順序!請留意。 –