Oprava: SELECT dotaz neočekávaně vrátí nesprávný počet řádků v SQL Server 2005 Mobile Edition a SQL Server 2005 Compact Edition

Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.

Projděte si také anglickou verzi článku:933697
Příznaky
Při spuštění SELECT dotazu v Microsoft SQL Server 2005 Mobile Edition a v Microsoft SQL Server 2005 zkomprimovat Edition, vrátí dotaz neočekávaně nesprávný počet řádků. Tento problém nastane v případě splnění následujících podmínek:
  • SELECT dotazu obsahuje vnitřní spojení.
  • Jeden dvou tabulek, které jsou připojeny má index na sloupci spojených. V tabulce má žádný index na jeho sloupců.
Například následující dotaz spustit v SQL Server 2005 Mobile Edition:
select * from T1, T2 where T1.Col = T2.Col1 order by T1.Col
Poznámka V tomto příkladu tabulka T1 má index na sloupci tabulky T2 sloupec… nemá index na sloupci Sloupec1.
Příčina
K tomuto problému dochází, protože Optimalizátor dotazů není zrušit předchozí plán zcela. Optimalizátor dotazu považuje více plánů dotazů před rozhodne Optimalizátor dotazu na nejlepší plán spuštění dotazu. V některých případech můžete najít Optimalizátor dotazu plán, který používá index k vyhodnocení podmínky. Optimalizátor dotazu však může později najít lepší plánu. V tomto případě dotazu Optimalizátor zahodí předchozí plánu použít lepší plán.
Řešení
Chcete-li tento problém vyřešit, použijte jednu z následujících metod:
  • Vytvořit index na sloupci spojených na druhé tabulky.
  • Odstranění indexu spojených sloupec v první tabulce.
Poznámka: V příkladu v části "Příznaky" spojených sloupec na druhé tabulky je T2.Col1. Spojených sloupec v první tabulce je T1.col.
Prohlášení
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.
Další informace

Postup reprodukce problému

  1. Proti databázi SQL Server 2005 Mobile Edition spusťte následující příkazy:
    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. Spustit následující příkaz:
    select * from T1, T2 where T1.Col = T2.Col1 order by T1.Col
    vyskytnout problém popsaný v části "Příznaky".

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 933697 - Poslední kontrola: 03/13/2007 19:39:22 - Revize: 1.2

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

  • kbmt kbtshoot kbexpertiseadvanced kbbug KB933697 KbMtcs
Váš názor