FIX: Smalldatetime 資料型別資料行聯結兩個資料表的查詢可能會產生不正確的結果,在 SQL Server 2000 中

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

按一下這裡查看此文章的英文版本:888998
本文已封存。本文係以「現狀」提供且不會再更新。
Bug #: 473085 (SQL Server 8.0)

結論
本文將告訴您下列關於此 Hotfix 版本:
  • 此 Hotfix 套件所修正的問題
  • 安裝 Hotfix 套件的先決條件
  • 是否之後,您必須重新啟動您的電腦安裝 Hotfix 套件
  • 是否 Hotfix 套件就會取代任何其他 Hotfix 套件
  • 您必須在是否做任何登錄變更
  • 包含在 Hotfix 套件中的檔案
back to the top
徵狀
在與 Hotfix 組建 8.00.0837 或較新版本的 Microsoft SQL Server 2000,您可能會執行使用 smalldatetime 資料型別的資料行上的 等聯結 來聯結兩個資料表的查詢。等聯結 是的聯結,其中兩個資料表的資料列會結合,並且會新增到結果集聯結資料行中有相等值時。如果篩選條件用常值為其中一個這些資料行上,查詢可能會傳回不正確的結果。下列查詢是 「 受影響查詢的範例:
declare @Date datetimeset @Date = '2005-01-01'Select t1.c1, t2.c2 from t1 Join t2 on t1.smalldatetime_column = t2.smalldatetime_columnWhere t1.smalldatetime_column = @Date
對於所有公開發行的 SQL Server 2000 Post-Service 套件 3a Hotfix 清單,請參閱下列文件 「 Microsoft 知識庫 」 中:
810185SQL Server 2000 Service Pack 3 和 3a SQL Server 2000 Hotfix 更新
back to the top
發生的原因
之所以發生這個問題,是因為 SQL Server 2000 Hotfix 建置 8.00.0837 最佳化查詢包含一個默示述詞值儘。因為隱含的參數不正確地使用 4 個位元組 smalldatetime 常數,而不是 8 位元組的日期時間常數,比較的不正確評估會發生執行階段。

back to the top
解決方案

Hotfix 資訊

Microsoft 提供支援的 Hotfix。不過,此 Hotfix 旨在修正本文中所述隨問題。只會發生此特定問題的系統套用此 Hotfix。

如果此 Hotfix 可供下載,您可在本知識庫文件的頂端找到「 可用的 Hotfix 下載 」區段。如果沒有出現此區段,將要求提交到 Microsoft 客戶服務及支援],以取得該 Hotfix。

附註如果發生其他問題,或如果需要任何疑難排解,您可能必須建立個別的服務要求。和此 Hotfix 無關的額外支援問題適用一般的支援費用。如需 Microsoft 客戶服務支援部門電話號碼的完整清單或要建立個別的服務要求,請造訪下列 Microsoft 網站:附註「 下載 Hotfix 」 表單會顯示此 Hotfix 會出現,以供使用的語言。如果您沒有看到您的語言,是因為此 Hotfix 是不適用您的語言。

back to the top

必要條件

您必須安裝 SQL Server 2000 Service Pack 3。為更多有關如何取得 SQL Server 2000 Service Pack 3,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
290211如何取得最新的 SQL Server 2000 Service Pack
此外,此 Hotfix 您必須具備也 SQL Server 2000 Hotfix 組建 2000.80.977 安裝。如需有關 SQL Server 2000 張貼 SP3a Hotfix 建置 2000.80.977,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項件:
888007當您嘗試安裝 SQL Server 2000 post-Service Pack 3 Hotfix 時,收到"的產品並沒有安裝的必要條件更新 」 錯誤訊息

重新啟動資訊

您必須套用此 Hotfix 之後,重新啟動 SQL Server 服務。

back to the top

Hotfix 檔案資訊

此 Hotfix 包含只需修正本文所列問題的那些檔案。此 Hotfix 並未包含必須將產品完整更新至最新版組建的所有檔案。

此 Hotfix 的英文版在檔案屬性 (或更新版本的檔案屬性) 如下列表格中所列。這些檔案的日期和時間為 Coordinated Universal Time (UTC)。當您檢視檔案資訊時,會將它轉換為當地時間。若要到 UTC 與當地時間差異使用 [中日期] 和 [時間] 工具,在 [控制台] 中的 [時區] 索引標籤]。
   Date         Time   Version        Size       File name   ----------------------------------------------------------   02-Nov-2004  06:02  2000.80.985.0    664,128  Autoplt.dll   02-Nov-2004  06:02  2000.80.985.0     78,400  Console.exe         02-Nov-2004  06:02  2000.80.985.0    332,352  Ctasksui.dll   02-Nov-2004  06:02  2000.80.985.0    315,968  Custtask.dll   02-Nov-2004  06:02  2000.80.985.0     33,340  Dbmslpcn.dll   02-Nov-2004  06:02  2000.80.985.0  1,905,216  Dtspkg.dll          02-Nov-2004  06:02  2000.80.985.0    528,960  Dtspump.dll   02-Nov-2004  06:02  2000.80.985.0     41,536  Dtsrun.exe   02-Nov-2004  06:02  2000.80.985.0  1,557,052  Dtsui.dll   02-Nov-2004  06:02  2000.80.985.0    639,552  Dtswiz.dll          02-Nov-2004  06:02  2000.80.985.0    352,828  Isqlw.exe           02-Nov-2004  06:02  2000.80.985.0     82,492  Itwiz.exe           02-Nov-2004  06:02  2000.80.985.0     90,692  Msgprox.dll         19-May-2004  23:43  8.11.40209.0     209,408  Mssdi98.dll         02-Nov-2004  06:02  2000.80.985.0     62,024  Odsole70.dll        02-Nov-2004  06:03  2000.80.985.0     25,144  Opends60.dll        02-Nov-2004  05:35                    17,576  Opends60.lib   02-Nov-2004  06:02  2000.80.985.0     57,904  Osql.exe   02-Nov-2004  06:02  2000.80.985.0    279,104  Pfutil80.dll        02-Nov-2004  06:02  2000.80.985.0    143,940  Qrdrsvc.exe         02-Nov-2004  06:02  2000.80.985.0    221,768  Replprov.dll        02-Nov-2004  06:03  2000.80.985.0    307,784  Replrec.dll         02-Nov-2004  06:03  2000.80.985.0    287,304  Rinitcom.dll        02-Nov-2004  06:03  2000.80.985.0     78,416  Sdiclnt.dll         02-Nov-2004  06:03  2000.80.985.0     66,112  Semmap.dll          02-Nov-2004  06:03  2000.80.985.0     57,916  Semnt.dll   02-Nov-2004  06:03  2000.80.985.0    492,096  Semobj.dll   02-Nov-2004  06:02  2000.80.985.0     53,832  Snapshot.exe   02-Nov-2004  06:01  2000.80.985.0     28,672  Sqlagent.dll   02-Nov-2004  06:02  2000.80.985.0    311,872  Sqlagent.exe   02-Nov-2004  06:01  2000.80.985.0    168,001  Sqlakw32.dll   02-Nov-2004  05:05                     4,352  Sqlakw32.lib   02-Nov-2004  06:03  2000.80.985.0     33,344  Sqlctr80.dll        02-Nov-2004  06:03  2000.80.985.0    815,676  Sqldata.dll         02-Nov-2004  06:03  2000.80.985.0  4,215,360  Sqldmo.dll          02-Nov-2004  06:02                    25,172  Sqldumper.exe       02-Nov-2004  06:02  2000.80.985.0    156,224  Sqlmaint.exe        02-Nov-2004  06:03  2000.80.985.0    180,792  Sqlmap70.dll        02-Nov-2004  06:03  2000.80.985.0    188,992  Sqlmmc.dll   02-Nov-2004  06:03  2000.80.985.0    401,984  Sqlqry.dll          02-Nov-2004  06:03  2000.80.985.0     57,920  Sqlrepss.dll        02-Nov-2004  06:03  2000.80.985.0  7,712,849  Sqlservr.exe        02-Nov-2004  06:03  2000.80.985.0    590,396  Sqlsort.dll         02-Nov-2004  06:03  2000.80.985.0     45,644  Sqlvdi.dll   02-Nov-2004  06:03  2000.80.985.0    106,588  Sqsrvres.dll   02-Nov-2004  06:03  2000.80.985.0     33,340  Ssmsgnet.dll        02-Nov-2004  06:03  2000.80.985.0     33,340  Ssmslpcn.dll        02-Nov-2004  06:03  2000.80.985.0     33,340  Ssmsqlgc.dll        02-Nov-2004  06:03  2000.80.985.0     33,340  Ssmssnet.dll        02-Nov-2004  06:03  2000.80.985.0     82,492  Ssnetlib.dll   02-Nov-2004  06:03  2000.80.985.0     25,148  Ssnmpn70.dll   02-Nov-2004  06:03  2000.80.985.0    123,456  Stardds.dll   02-Nov-2004  06:03  2000.80.985.0    158,240  Svrnetcn.dll        02-Nov-2004  06:02  2000.80.985.0     76,416  Svrnetcn.exe        02-Nov-2004  06:03  2000.80.985.0     49,228  Ums.dll             02-Nov-2004  06:03  2000.80.985.0     74,304  Xplog70.dll         02-Nov-2004  06:03  2000.80.985.0     98,872  Xpweb70.dll         17-Nov-2004  18:13                     6,615  Hotfix1.inf   17-Nov-2004  18:13                     2,471  Hotfix2.inf   30-Sep-2003  22:34  8.0.21213.0      352,256  Msvcr71.dll         30-Sep-2003  22:34  2000.80.796.0     57,904  Osql.exe   30-Sep-2003  22:34  2000.80.534.0    127,548  Sqdedev.dll         30-Sep-2003  22:34  2000.80.194.0    180,290  Sqlunirl.dll        02-Nov-2004  05:01  2000.80.985.0    159,813  Replres.rll   02-Nov-2004  05:28  2000.80.985.0    172,032  Semobj.rll   02-Nov-2004  04:53  2000.80.985.0     28,672  Sqlevn70.rll   02-Nov-2004  05:17  2000.80.985.0    479,232  Sqlmmc.rll
附註由於檔案相依性的最新 Hotfix 包含這些檔案也可能包含其他檔案。back to the top
其他可行方案
如果要解決這個問題,使用下列方法之一:
  • 使用 型別轉換 函式轉換 日期時間 資料行做為 smalldate 常數。
  • smalldatetime 的資料行上建立非叢集索引。
back to the top
狀況說明
Microsoft 已確認這是在 < 適用於 > 一節中所列出的 Microsoft 產品中有錯誤。

back to the top
其他相關資訊

重現這個問題的步驟

下列 Transact-SQL 陳述式在 SQL Server 2000 上的使用 Hotfix 建置 8.00.0837 和之後的版本不正確地傳回 0 個資料列:
select @@versiongo Create Table t1 (      c1 SmallDateTime,      c2 varchar(15))go Create Table t2 (      c1 smalldatetime,      c2 Varchar(15))go Insert Into t1 Values ('2004-10-21','abc')Insert Into t1 Values ('2004-10-21','efg') Insert Into t2 Values ('2004-10-21', 'ddd') Insert Into t2 Values ('2004-10-21', 'eee')   declare @Date datetimeset @Date = '2004-10-21' Select t1.*, t2.*from t1 join t2 On t1.c1 = t2.c1Where t1.c1 = @Datego drop table t1drop table t2go 
正確的結果是下列四個資料列。這些資料列取得以 Hotfix 組建 8.00.0760,.0818,執行 SQL Server 2000 的電腦上和透過組建建置.0836
c1                                                     c2              c1                                                     c2              ------------------------------------------------------ --------------- ------------------------------------------------------ --------------- 2004-10-21 00:00:00                                    abc             2004-10-21 00:00:00                                    ddd2004-10-21 00:00:00                                    abc             2004-10-21 00:00:00                                    eee2004-10-21 00:00:00                                    efg             2004-10-21 00:00:00                                    ddd2004-10-21 00:00:00                                    efg             2004-10-21 00:00:00                                    eee
如 SQL Server 更新命名的結構描述的更多有關,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
822499Microsoft SQL Server 軟體更新套件的新命名結構描述
如 Microsoft 時它已修正軟體,它發行之後所使用的術語的更多有關,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
824684用來描述 Microsoft 軟體更新標準術語的說明
back to the top

警告:本文為自動翻譯

內容

文章識別碼:888998 - 最後檢閱時間:01/17/2015 09:20:18 - 修訂: 1.5

Microsoft SQL Server 2000 Desktop Engine (MSDE) SP3, Microsoft SQL Server 2000 Service Pack 3, Microsoft SQL Server 2000 Personal Edition Service Pack 3, Microsoft SQL Server 2000 Service Pack 3, Microsoft SQL Server 2000 Service Pack 3

  • kbnosurvey kbarchive kbmt kbautohotfix kbsqlserv2000presp4fix kbbug kbfix kbhotfixserver kbqfe KB888998 KbMtzh
意見反應