你目前正处于脱机状态,正在等待 Internet 重新连接

FIX: 用 SELECT 查询意外返回行的数不正确 SQL Server 2005 移动版在和中 SQL Server 2005 压缩版

Extended support for SQL Server 2005 ends on April 12, 2016

If you are still running SQL Server 2005 after April 12, 2016, you will no longer receive security updates and technical support. We recommend upgrading to SQL Server 2014 and Azure SQL Database to achieve breakthrough performance, maintain security and compliance, and optimize your data platform infrastructure. Learn more about the options for upgrading from SQL Server 2005 to a supported version here.

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

点击这里察看该文章的英文版: 933697
症状
当在 Microsoft SQL Server 2005 移动版和 Microsoft SQL Server 2005 精简版中,在运行 SELECT 查询时,查询意外返回行的数不正确。如果满足下列条件都为真,就会出现此问题:
  • SELECT 查询包含内部联接。
  • 两个联接的表的一个联接列上的索引。另一个表上的任何其列有没有索引。
例如对于 SQL Server 2005 移动版在中运行以下查询:
select * from T1, T2 where T1.Col = T2.Col1 order by T1.Col
在此示例中 注释,表 T1 有一个索引列上 Col.表 T2 没有列 Col1 上的索引。
原因
由于查询优化器不会丢弃以前计划完全,则会出现此问题。查询优化器决定最佳计划执行查询之前,查询优化器考虑多个查询计划。在某些种情况下,查询优化器可以找到使用索引来计算条件的计划。但是,查询优化器以后可能会发现更好的计划。在这种情况下查询优化器将放弃以前的计划,可以更好的计划。
解决方案
若要解决此问题,请使用下列方法之一:
  • 在第二个表上联接列上创建索引。
  • 删除在第一个表联接的列的索引。
注意在"症状"部分中的示例中,上第二个表的联接的列是 T2.Col1。在第一个表上的联接的列是 T1.Col。
状态
Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的错误。
更多信息

重现此问题的步骤

  1. 对在 SQL Server 2005 移动版数据库中运行下列语句:
    CREATE TABLE T1 (COL INT);GO;CREATE INDEX T1_IDX ON T1 (COL);GO;INSERT INTO T1 VALUES (1);INSERT INTO T1 VALUES (2);INSERT INTO T1 VALUES (3);GO;CREATE TABLE T2 (COL1 INT, COL2 INT);GO;INSERT INTO T2 VALUES (1,1);INSERT INTO T2 VALUES (2,2);INSERT INTO T2 VALUES (3,3);GO;
  2. 运行下列语句:
    select * from T1, T2 where T1.Col = T2.Col1 order by T1.Col
    您遇到"症状"部分中描述的问题。

Warning: This article has been translated automatically

属性

文章 ID:933697 - 上次审阅时间:03/13/2007 19:39:22 - 修订版本: 1.2

Microsoft SQL Server 2005 Mobile Edition, Microsoft SQL Server 2005 Compact Edition

  • kbmt kbtshoot kbexpertiseadvanced kbbug KB933697 KbMtzh
反馈