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

Překlady článku Překlady článku
ID článku: 933697 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

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".

Vlastnosti

ID článku: 933697 - Poslední aktualizace: 13. března 2007 - Revize: 1.2
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft SQL Server 2005 Mobile Edition
  • Microsoft SQL Server 2005 Compact Edition
Klíčová slova: 
kbmt kbtshoot kbexpertiseadvanced kbbug KB933697 KbMtcs
Strojově přeložený článek
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

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com