Microsoft 發佈 Microsoft SQL Server 2008 修正成一個可下載的檔案。 因為修正程式是累加的,所以每個新發行版本本都包含舊版 SQL Server 2008 修正版本中包含的所有修復程式及所有安全性修正程式。
徵狀
請考慮下列情況。
-
您有一個查詢會將 ROW_NUMBER 函數與 Microsoft SQL Server 2008 中的左外部連接搭配使用。
-
您可以建立一個 SELECT 語句,該語句使用查詢做為子查詢,並使用 DISTINCT 關鍵字傳回唯一列。
-
您執行這個 SELECT 語句。
在這種情況下,您可能會收到不正確的結果。 不正確地忽略左外部聯結。注意: 如需如何再現此問題的詳細資訊,請參閱 "其他資訊" 一節中的「再現此問題的步驟」小節。
解決方案
累積更新資訊
SQL Server 2008 R2
此問題的修正程式是在累積更新6中第一次發行。如需有關如何取得 SQL Server 2008 R2 累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:
2489376 SQL Server 2008 R2 的累積更新套件6 注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2008 R2 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
981356 在發行 SQL Server 2008 R2 之後發行的 SQL Server 2008 R2 組建
SQL Server 2008 Service Pack 1
此問題的修正程式是在 SQL Server 2008 Service Pack 1 的累積更新11中第一次發行。如需此累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:
2413738 SQL Server 2008 Service Pack 1 的累積更新套件11注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2008 修正版本中所包含的所有修復程式及所有安全性修正程式。 Microsoft 建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
970365 在發行 SQL Server 2008 Service Pack 1 之後發行的 SQL Server 2008 組建 Microsoft SQL Server 2008 修復程式是針對特定的 SQL Server service pack 建立的。 您必須將 SQL Server 2008 Service Pack 1 修補程式套用至 SQL Server 2008 Service Pack 1 的安裝。 根據預設,SQL Server service pack 中提供的任何熱修復程式都包含在下一個 SQL Server service pack 中。
SQL Server 2008 Service Pack 2
此問題的修正程式是在 SQL Server 2008 的累積更新2(Service Pack 2)中第一次發行。如需此累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:
2467239 SQL Server 2008 的累積更新套件 2 Service Pack 2注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2008 修正版本中所包含的所有修復程式及所有安全性修正程式。 Microsoft 建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
2402659 在發行 SQL Server 2008 Service Pack 2 之後發行的 SQL Server 2008 組建 Microsoft SQL Server 2008 修復程式是針對特定的 SQL Server service pack 建立的。 您必須將 SQL Server 2008 Service Pack 2 修補程式套用至 SQL Server 2008 Service Pack 2 的安裝。 根據預設,SQL Server service pack 中提供的任何熱修復程式都包含在下一個 SQL Server service pack 中。
狀態
Microsoft 已確認<適用於>一節中所列的 Microsoft 產品確實有上述問題。
其他相關資訊
再現這個問題的步驟
-
執行下列語句。 這些語句會建立兩個數據表,並將部分資料插入資料表中。
create table A (a1 int)create table B (b1 int)insert into A values(1)insert into B values(1)insert into B values(1)
-
執行下列語句。 這個語句會將 ROW_NUMBER 函數與左外部連接搭配使用。
select a1, row_number() over (partition by a1 order by a1) as a3from Aleft join B ON A.a1 = B.b1
-
執行下列語句。 這個語句使用步驟2中的查詢做為子查詢:
select distinct a1, a3from ( select a1, row_number() over (partition by a1 order by a1) as a3 from A left join B ON A.a1 = B.b1) as x
注意當這個問題發生時,步驟3中的查詢會傳回不正確的結果。
參考
如需 ROW_NUMBER 函數及外部連接的詳細資訊,請造訪下列 Microsoft 開發人員網路(MSDN)網站:
如需有關 SQL Server 的增量服務模型的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:
935897 您可以從 SQL Server 團隊取得增量服務模型,以提供已報告問題的修補程式如需 SQL Server 更新命名架構的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:
822499Microsoft SQL Server 軟體更新套件的新命名架構如需軟體更新術語的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:
824684 描述 Microsoft 軟體更新所使用的標準術語說明