Sql-Server

TOP 1 子句 sql server 的奇怪行為

  • April 20, 2021

我有一個 SQL Server 數據庫並將其還原到另一台機器上的另一台伺服器上。現在我在兩個 DB 上執行相同的查詢,產生相同的以下結果集。

select person_id, visit_id, verification_code, mobileNo, created_date
from person
order by verification_code, created_date DESC

在此處輸入圖像描述

但是當我在上面的查詢中添加 TOP 1 子句時,原始數據庫顯示第二行(忽略第一行)

select TOP 1 person_id, visit_id, verification_code, mobileNo, created_date
from person
order by verification_code, created_date DESC

在此處輸入圖像描述

而恢復的數據庫顯示第一行

在此處輸入圖像描述

我認為這可能是由於排序規則不同,但我檢查了兩台伺服器的排序規則相同。

Mike D. 提供了有關 SQL Server 如何對數據進行排序的答案,這可能有助於您了解您在某些評論中看到的確定性結果是什麼。

文件的論點說:ORDER BY

升學 | DESC
指定指定列中的值應按升序或降序排序。ASC 從最低值到最高值排序。DESC 從最高值到最低值排序。ASC 是預設的排序順序。Null 值被視為可能的最低值。

所有NULL值都位於結果的頂部,因為它們是可能的最低值,並且由於這些行的值都是相同的,根據集合論,首先呈現四個值中create_date的哪一個沒有任何區別。NULL

引用自:https://dba.stackexchange.com/questions/290105