KB2433265 – OPRAVA: Pokud ve verzích SQL Server 2008 a SQL Server 2008 R2 spustíte dotaz, který používá funkci ROW_NUMBER společně s levým vnějším spojením, může se zobrazit nesprávný výsledek

Platí pro
SQL Server 2008 Enterprise SQL Server 2008 Standard SQL Server 2008 Workgroup SQL Server 2008 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Workgroup SQL Server 2008 R2 Developer

Microsoft distribuuje opravy systému Microsoft SQL Server 2008 jako jeden soubor ke stažení. Vzhledem k tomu, že opravy jsou kumulativní, obsahuje každá nová verze všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí verze opravy pro SQL Server 2008.

Příznaky

Podívejte se na tento scénář:

  • V Microsoft SQL Server 2008 máte dotaz, který používá funkci ROW_NUMBER společně s levým vnějším spojením.
  • Vytvoříte příkaz SELECT, který používá dotaz jako poddotaz a vrací jedinečné řádky pomocí klíčového slova DISTINCT.
  • Spustíte tento příkaz SELECT.

V tomto scénáři se může zobrazit nesprávný výsledek. Levé vnější spojení je nesprávně ignorováno.

Poznámka: Další informace o tom, jak reprodukovat tento problém, naleznete v dílčí části "Postup pro reprodukci tohoto problému" v části "Další informace".

Řešení

Informace o kumulativní aktualizaci

SQL Server 2008 R2

Oprava tohoto problému byla poprvé vydána v kumulativní aktualizaci 6. Další informace o získání tohoto balíčku kumulativní aktualizace pro SQL Server 2008 R2 naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

2489376 Balíček kumulativní aktualizace 6 pro SQL Server 2008 R2 Poznámka: Buildy jsou kumulativní, a proto každá nová verze opravy obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozího vydání opravy SQL Server 2008 R2. Doporučujeme zvážit použití nejnovější verze opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

981356 Buildy SQL Server 2008 R2, které byly vydány po vydání verze SQL Server 2008 R2

SQL Server 2008 Service Pack 1

Oprava, která tento problém řeší, byla poprvé vydána v kumulativní aktualizaci 11 pro SQL Server 2008 Service Pack 1.

Další informace o tomto balíčku kumulativních aktualizací naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

2413738 Balíček kumulativní aktualizace 11 pro SQL Server 2008 Service Pack 1Poznámka: Vzhledem k tomu, že buildy jsou kumulativní, obsahuje každá nová verze opravy všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí verze opravy pro SQL Server 2008. Společnost Microsoft doporučuje zvážit použití nejnovější verze opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

970365 Buildy SQL Server 2008 vydané po vydání aktualizace Service Pack 1 SQL Server 2008 Opravy hotfix pro Microsoft SQL Server 2008 se vytváří pro konkrétní SQL Server aktualizace Service Pack. Opravu hotfix pro SQL Server 2008 Service Pack 1 je nutné nainstalovat k instalaci systému SQL Server 2008 Service Pack 1. Ve výchozím nastavení jsou všechny opravy hotfix poskytované v aktualizaci Service Pack pro SQL Server zahrnuty do další aktualizace Service Pack pro SQL Server.

SQL Server 2008 Service Pack 2

Oprava tohoto problému byla poprvé vydána v kumulativní aktualizaci 2 pro SQL Server 2008 Service Pack 2. Další informace o tomto balíčku kumulativních aktualizací naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

2467239 Balíček kumulativní aktualizace 2 pro SQL Server 2008 Service Pack 2Poznámka Vzhledem k tomu, že buildy jsou kumulativní, obsahuje každá nová verze opravy všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí verze opravy SQL Server 2008. Společnost Microsoft doporučuje zvážit použití nejnovější verze opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

2402659 Buildy SQL Server 2008 vydané po vydání aktualizace Service Pack 2 SQL Server 2008 Opravy hotfix pro Microsoft SQL Server 2008 se vytváří pro konkrétní SQL Server aktualizace Service Pack. Opravu hotfix pro SQL Server 2008 Service Pack 2 je nutné nainstalovat pro instalaci systému SQL Server 2008 Service Pack 2. Ve výchozím nastavení jsou všechny opravy hotfix poskytované v aktualizaci Service Pack pro SQL Server zahrnuty do další aktualizace Service Pack pro SQL Server.

Stav

Společnost Microsoft potvrdila, že se jedná o problém produktů Microsoft, které jsou uvedeny v sekci Platí pro.

Další informace

Postup pro reprodukci tohoto problému

  1. Spusťte následující příkazy. Tyto příkazy vytvoří dvě tabulky a vloží do nich nějaká data.

    create table A (a1 int)
    
    create table B (b1 int)
    
    
    
    insert into A values(1)
    
    insert into B values(1)
    
    insert into B values(1)
    
  2. Spusťte následující příkaz. Tento příkaz používá funkci ROW_NUMBER společně s levým vnějším spojením.

    select a1, row_number() over (partition by a1 order by a1) as a3
    
    from A
    
    left join B ON A.a1 = B.b1
    
  3. Spusťte následující příkaz. Tento příkaz používá dotaz v kroku 2 jako poddotaz:

    select distinct a1, a3
    
    from (
    
          select a1, row_number() over (partition by a1 order by a1) as a3
    
          from A
    
          left join B ON A.a1 = B.b1
    
    ) as x
    

Poznámka: Pokud dojde k tomuto problému, vrátí dotaz v kroku 3 nesprávný výsledek.

Reference

Další informace o funkci ROW_NUMBER a vnějších spojeních naleznete na následujících webech služby MSDN (web MSDN (Microsoft Developer Network)):

Další informace o modelu přírůstkové údržby pro SQL Server naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

935897 Tým SQL Server poskytuje k poskytování oprav hotfix pro hlášené problémy model přírůstkové údržby

Další informace o schématu pojmenování aktualizací pro aktualizace serveru SQL Server naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

822499 Nové schéma pojmenování balíčků aktualizací softwaru Microsoft SQL Server Další informace o terminologii aktualizací softwaru naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:

824684 Popis standardní terminologie používané k popisu aktualizací softwaru společnosti Microsoft