FIX: 一种 smalldatetime 的数据类型列联接两个表的查询可能会产生 SQL Server 2000 中不正确的结果

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 888998
本文已归档。它按“原样”提供,并且不再更新。
错误 #: 473085 (SQL Server 8.0)

概要
本文介绍以下有关此修补程序版本:
  • 通过此修补程序包修复的问题
  • 安装此修补程序包的先决条件
  • 在安装此修补程序包后是否必须重新启动您的计算机
  • 此修补程序包是否替换任何其他修补程序包
  • 是否必须进行任何注册表更改
  • 修补程序包中包含的文件
back to the top
症状
在与修补程序生成 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 修补程序在资源列表,请参阅下面 Microsoft 知识库中相应的文章:
810185SQL Server 2000 修复程序更新 SQL Server 2000 Service Pack 3 和 3a
back to the top
原因
因为 SQL Server 2000 修复程序生成 8.00.0837 优化查询,以包括一个隐含的谓词值,只要有可能会出现此问题。因为暗示的参数不正确地使用 4 个字节 smalldatetime 常量,而不是 8 个字节的日期时间常量,不正确的求值的比较结果发生在运行时。

back to the top
解决方案

修补程序信息

可以从 Microsoft 获得支持的修补程序。但是,此修补程序被用于解决本文所述的此问题。此修补程序仅应用于出现这一特定问题的系统。

是否可供下载此修补程序没有"提供修补程序下载"部分中,在这篇知识库文章的顶部。如果未出现本部分,将申请提交到 Microsoft 客户服务和支持以获取此修复程序。

注意如果出现其他问题,或者如果需要进行任何故障诊断,则您可能不得不创建单独的服务请求。将正常收取支持费用将应用于其他支持问题和不需要进行此特定的修补程序的问题。有关完整列表的 Microsoft 客户服务和支持的电话号码,或创建一个单独的服务请求,请访问下面的 Microsoft 网站:注意"提供修补程序下载"窗体所显示的此修复程序是可用的语言。如果您看不到您的语言,则是一个修复程序不能用于该语言。

back to the top

系统必备组件

您必须安装 SQL Server 2000 Service Pack 3。有关详细信息如何获得 SQL Server 2000 Service Pack 3,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
290211如何获取最新的 SQL Server 2000 服务包
此外,此修补程序需要您同时具有 SQL Server 2000 修复程序生成 2000.80.977 安装。有关 SQL Server 2000 后 SP3a 修补程序的信息生成 2000.80.977,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
888007当您尝试安装一个 SQL Server 2000 post-Service Pack 3 修补程序时,您收到产品没有安装必备更新后"的错误消息

重新启动信息

您必须在应用此修补程序后重新启动您 SQL Server 的服务。

back to the top

修补程序文件信息

此修补程序仅包含那些文件解决本文列出了该问题所必需的。此修补程序不能包含将产品完全更新到最新版本所必需的所有文件。

此修补程序的英文版具有的文件属性 (或更新的文件属性) 在下表中列出。日期和时间对这些文件列出在协调世界时 (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
注意由于存在文件依赖性包含这些文件的最新修补程序还可能包含其他文件。back to the top
替代方法
要变通解决此问题,请使用下列方法之一:
  • 使用 强制转换 函数将强制转换为 smalldate 常数在 日期时间 列。
  • smalldatetime 列上创建非聚集索引。
back to the top
状态
Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的错误。

back to the top
更多信息

重现行为的步骤

The following Transact-SQL statements on SQL Server 2000 with hotfix build 8.00.0837 and later versions incorrectly return 0 rows:
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 
The correct results are the following four rows.这些行都获得了修复程序生成 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

属性

文章 ID: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
反馈