Oprava: Více volání na uživatele definované funkce v agregační funkce může vrátit nesprávné výsledky

Překlady článku Překlady článku
ID článku: 288957 - Produkty, které se vztahují k tomuto článku.
CHYBA Č: 236595 (SHILOH_BUGS)
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

SQL Server může vrátit nesprávné výsledky dotazu, pokud jsou splněny všechny následující podmínky:
  • Dotaz obsahuje dvě nebo více odkazů na stejnou agregační funkci.
  • Tyto agregační funkce jako jejich parametr trvat výsledky z volání stejný uživatelem definované funkce (UDF).
  • Volání UDF předat stejné první parametr.
  • UDF trvá dva nebo více parametrů a výsledky vrátí jsou závislé na hodnotě ty sekundární parametry.

Příčina

Optimalizátor pokusí najít duplicitní agregační funkce v dotazu, takže každý jedinečný agregační se počítá pouze jednou. Vzít v úvahu sekundární parametry, které jsou předávaný UDF a může nesprávně identifikovat dvě agregáty jako ekvivalentní kód se nezdaří.

Řešení

Tento problém vyřešíte získat nejnovější aktualizaci service pack pro 2000 Microsoft SQL Server. Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
290211INF: Jak získat nejnovější aktualizaci Service Pack pro SQL Server 2000

Oprava hotfix

Poznámka: Tato oprava hotfix následující vytvořeného před instalací Microsoft SQL Server 2000 Service Pack 1.

Anglická verze této opravy má následující atributy souborů nebo novější:
   Version      File name       Platform
   -------------------------------------

   8.00.251     s80251i.exe     x86

				

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny na začátku tohoto článku. Tento problém byl poprvé opraven v Microsoft SQL Server 2000 Service Pack 1.

Další informace

Následující příklad znázorňuje problém.

CREATE TABLE functest (c1 int NULL, c2 int NULL, c3 int NULL,
 c4 int NULL, c5 int NULL, c6 int NULL)
GO
INSERT INTO functest VALUES(1,2,3,4,5,6)
go
CREATE FUNCTION t3 (@one int, @two int, @three int) RETURNS int AS
BEGIN
  RETURN (@one*@two*@three)
END
GO
--This works correctly, returns 720
SELECT avg(dbo.t3(c1,c2,c3)) * avg(dbo.t3(c4,c5,c6)) correct FROM functest
go
--This is incorrect, returns 36, should be 180
SELECT avg(dbo.t3(c1,c2,c3)) * avg(dbo.t3(c1,c5,c6)) incorrect FROM functest
go
--If you swap c1 and c6, the results are correct! (180)
SELECT avg(dbo.t3(c1,c2,c3)) * avg(dbo.t3(c6,c5,c1)) correct FROM functest
				
Poznámka: Jak získat nesprávné výsledky pouze v případě, že oba odkazy UDF předat jako název sloupce nebo hodnotu literálu funkci stejné první parametr.

Vlastnosti

ID článku: 288957 - Poslední aktualizace: 6. listopadu 2003 - Revize: 3.1
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft SQL Server 2000 Standard Edition
Klíčová slova: 
kbmt kbbug kbfix kbqfe kbsqlserv2000sp1fix KB288957 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:288957

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