我有以下數據如何前1作品在SQL Server 2012
IF OBJECT_ID('TEMPDB.DBO.#t1', 'U') IS NOT NULL
DROP TABLE #t1;
CREATE TABLE #t1
([c1] varchar(100), [c2] varchar(10), [c3] varchar(100), [c4] varchar(100))
;
INSERT INTO #t1
([c1], [c2], [c3], [c4])
VALUES
(93, '60-1.1.1.', 60, 3),
(104, '60-1.2.1.', 60, 3),
(102, '60-1.1.2.', 60, 3),
(101, '60-1.2.2.', 60, 3),
(92, '60-1.1.3.', 60, 3),
(96, '60-1.2.3.', 60, 3),
(103, '60-1.1.4.', 60, 3),
(94, '60-1.2.4.', 60, 3),
(105, '60-1.2.5.', 60, 3),
(97, '60-1.2.6.', 60, 3),
(99, '60-1.2.7.', 60, 3),
(100, '60-1.2.8.', 60, 3),
(98, '60-1.2.9.', 60, 3),
(95, '60-1.2.10.', 60, 3),
(91, '60-1.2.11.', 60, 3)
;
select * from #t1
表的結果如下
select * from #t1 order by c3,c4
表
現在我跑了以下查詢我得到了預期的結果
select Cast(c4 AS VARCHAR(2)) + '~'+ Cast(c1 AS VARCHAR(100)) AS c5,* from #t1
上述查詢的結果如下
現在我已經使用頂1獲取的記錄我所編寫的代碼如下
select top 1 Cast(c4 AS VARCHAR(2)) + '~'+ Cast(c1 AS VARCHAR(100)) AS c5,* from #t1
的以上查詢結果如下
我現在已經使用頂部帶有ORDER BY子句然後我得到了以下結果
select top 1 Cast(c4 AS VARCHAR(2)) + '~'+ Cast(c1 AS VARCHAR(100)) AS c5,*
from #t1 order by c3,c4
問:爲什麼在過去的2個查詢結果的變化,如我所喜歡期待相同的結果?
讓我問你這樣:
當我沒有爲了執行前1查詢通過我得到了93的記錄值,所以當我按列與順序執行前1我希望同樣的結果。在查詢按我的設想有通過caluse無秩序的影響
在此先感謝
編輯1
甚至當我執行100個時結果是相同的
EDIT 2
- 服務器1
其實我已經創建了一個主表並插入了上面的記錄。運行兩個不同的會話的最後兩個查詢,結果是相同的
- 服務器2
完成在第二服務器中的上述(在服務器1相同的步驟)。運行最後兩個前1個查詢,結果在兩個會話中是相同的。
結果似乎在服務器和會話中都是相同的。
結果
第一個查詢不會使用'order by'與'top'..and第二個確實..但是,因爲在c3,c4值中有關係,除非您在'order by'中指定了不同的列,結果將是任意的。 –
如果沒有'ORDER BY' –
@vkp,它不會執行任何操作,但是執行100次後結果相同 – Smart003