FIX: 不正確的結果從平行查詢使用了 UNION 和變數或參數

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

822746
本文已封存。本文係以「現狀」提供且不會再更新。
徵狀
如果您的查詢符合下列條件,您可能會收到不正確的結果:
  • 查詢指定一個 UNION 或一個 UNION ALL 的兩個或多個輸入。
  • 在 [UNION 至少一個 SELECT 陳述式傳回參數或變數的值 (也就是它使用這個值在選取的清單,而不是在條件子句)。
  • 資料行傳回變數或參數值被用來作為聯結或查詢] 樹狀目錄中較高層的群組資料行和此運算子會以平行方式執行,需要分割資料流根據聯結或分組資料行。

下列查詢是受制於此問題的其中一個範例:
DECLARE @a SMALLINTSET @a=1SELECT yy, COUNT(*) FROM ( 	SELECT productid xx, @a yy FROM products	UNION ALL	SELECT productid xx, unitsinstock yy FROM products     ) zzGROUP BY yy
附註此查詢不 Northwind 資料庫的 reproduce 案例。它是僅有顯示上假設性的資料表名稱為 產品 的表單及假設查詢的語法。
解決方案

服務套件資訊

如果要解決這個問題,取得最新的 Service Pack,Microsoft SQL Server 2000。如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
290211如何取得最新的 SQL Server 2000 Service Pack

Hotfix 資訊

此修正程式的英文版具有檔案屬性 (或更新) 中如下表所列。這些檔案的日期和時間為 Coordinated Universal Time (UTC)。當您檢視檔案資訊時,會將它轉換為當地時間。 若要到 UTC 與當地時間差異使用 [中日期] 和 [時間] 工具,在 [控制台] 中的 [時區] 索引標籤]。
   Date         Time   Version         Size             File name   ---------------------------------------------------------------------------   31-May-2003  18:45  2000.80.818.0      78,400 bytes  Console.exe         25-Jun-2003  01:01  2000.80.818.0      33,340 bytes  Dbmslpcn.dll        25-Apr-2003  02:12                    786,432 bytes  Distmdl.ldf   25-Apr-2003  02:12                  2,359,296 bytes  Distmdl.mdf   30-Jan-2003  01:55                        180 bytes  Drop_repl_hotfix.sql   23-Jun-2003  22:40  2000.80.837.0   1,557,052 bytes  Dtsui.dll           23-Jun-2003  22:40  2000.80.837.0     639,552 bytes  Dtswiz.dll          24-Apr-2003  02:51                    747,927 bytes  Instdist.sql   03-May-2003  01:56                      1,581 bytes  Inst_repl_hotfix.sql   08-Feb-2003  06:40  2000.80.765.0      90,692 bytes  Msgprox.dll         01-Apr-2003  02:07                      1,873 bytes  Odsole.sql   05-Apr-2003  01:46  2000.80.800.0      62,024 bytes  Odsole70.dll        07-May-2003  20:41  2000.80.819.0      25,144 bytes  Opends60.dll        02-Apr-2003  21:48  2000.80.796.0      57,904 bytes  Osql.exe            02-Apr-2003  23:15  2000.80.797.0     279,104 bytes  Pfutil80.dll        22-May-2003  22:57                     19,195 bytes  Qfe469571.sql   12-Jun-2003  16:37                  1,083,989 bytes  Replmerg.sql   04-Apr-2003  21:53  2000.80.798.0     221,768 bytes  Replprov.dll        08-Feb-2003  06:40  2000.80.765.0     307,784 bytes  Replrec.dll         05-May-2003  00:05                  1,085,874 bytes  Replsys.sql   01-Jun-2003  01:01  2000.80.818.0     492,096 bytes  Semobj.dll          31-May-2003  18:27  2000.80.818.0     172,032 bytes  Semobj.rll   29-May-2003  00:29                    115,944 bytes  Sp3_serv_uni.sql   01-Jun-2003  01:01  2000.80.818.0   4,215,360 bytes  Sqldmo.dll          07-Apr-2003  17:44                     25,172 bytes  Sqldumper.exe       19-Mar-2003  18:20  2000.80.789.0      28,672 bytes  Sqlevn70.rll   02-Jul-2003  00:18  2000.80.834.0     180,736 bytes  Sqlmap70.dll        08-Feb-2003  06:40  2000.80.765.0      57,920 bytes  Sqlrepss.dll        23-Jun-2003  22:40  2000.80.837.0   7,553,105 bytes  Sqlservr.exe        08-Feb-2003  06:40  2000.80.765.0      45,644 bytes  Sqlvdi.dll          25-Jun-2003  01:01  2000.80.818.0      33,340 bytes  Ssmslpcn.dll        01-Jun-2003  01:01  2000.80.818.0      82,492 bytes  Ssnetlib.dll        01-Jun-2003  01:01  2000.80.818.0      25,148 bytes  Ssnmpn70.dll        01-Jun-2003  01:01  2000.80.818.0     158,240 bytes  Svrnetcn.dll        31-May-2003  18:59  2000.80.818.0      76,416 bytes  Svrnetcn.exe        30-Apr-2003  23:52  2000.80.816.0      45,132 bytes  Ums.dll             02-Jul-2003  00:19  2000.80.834.0      98,816 bytes  Xpweb70.dll       			
注意 由於檔案相依性、 最新 Hotfix 或包含檔案的功能的可能也包含其他檔案。
其他可行方案
其中一個需求,以導致此案例中不正確的結果是查詢會挑選平行計劃。如果要解決這個問題,您可以停用在查詢層級,藉由使用一個 「 MAXDOP 1 」 的任一個提示 (請參閱 SQL Server 線上叢書 》 的相關資訊),平行處理原則或藉由將組態參數平行處理 「 最大程度的原則 」 設定為 1 (藉由使用 sp_configure 預存程序) 的伺服器層級。
狀況說明
Microsoft 已確認這是在本文開頭所列之 Microsoft 產品中的問題。 這個問題,首先已經在 Microsoft SQL Server 2000 服務套件 4 中獲得修正。

警告:本文已自動翻譯

內容

文章識別碼:822746 - 最後檢閱時間:02/27/2014 13:31:42 - 修訂: 7.4

  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2000 Enterprise Edition 64-bit
  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbqfe kbsqlserv2000presp4fix kbfix kbbug KB822746 KbMtzh
意見反應