PRB: Výsledky agregační dotazy řetězení a plán spuštění závisí na umístění výrazu

ID článku: 287515 - 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

Neočekávané výsledky setkat při použít operátory nebo výrazů klauzule ORDER by zřetězení agregačních dotazů. Výsledky zřetězení agregační dotazy v Microsoft SQL Server závisí na zda Transact-SQL výrazy použité sloupce v klauzuli ORDER by dotazu. Další informace nebo viz příklad zřetězení agregační dotaz a chování exhibited naleznete v části "Další informace" tohoto článku.

Příčina

Správné chování dotazu agregační zřetězení nedefinovaná.

Kontrolu SHOWPLAN výstupu dotazu udává, že procesor dotazu SQL Server vytvoří plán různých spuštění výrazy použité na sloupce v klauzuli dotazu ORDER by, než při použití těchto výrazů stejné sloupce v seznamu SELECT dotazu. Rozhodnutí provedené procesoru dotaz je založen na náklady možných provádění plány.

Specifikace ANSI-SQL 92 vyžaduje libovolný sloupec odkazuje klauzuli ORDER odpovídat sadě výsledků definované sloupce v seznamu SELECT existuje. Jestliže výraz je použita člen klauzuli ORDER, výsledný sloupce vystaven v seznamu SELECT výsledné Nedefinovaný chování.

Navíc state specifikace ANSI týkající se jak má být použita klauzule ORDER by, účinek ORDER BY měla být stejná jako Pokud trvat sadu celý výsledek vyrobeno seznam SELECT a provést řazení tabulky na základě těchto sloupců v seznamu SELECT.

Jak potíže obejít

K dosažení očekávané výsledky z dotazu agregační zřetězení, použít pro sloupce v seznamu SELECT, nikoli v klauzuli ORDER by funkce Transact-SQL nebo výraz.

Další informace

Zřetězení agregační dotaz je dotaz kombinuje hodnoty více řádků do jednoho řádku.

Kroky pro reprodukci chování

Použít následující skript Transact-SQL pro reprodukci chování.

Poznámka: aplikace funkcí příkazů LTRIM a RTRIM sloupce [C1] v klauzuli ORDER by versus seznam SELECT.
IF EXISTS( SELECT * FROM sysobjects WHERE name = 'T1' )
	DROP TABLE T1
GO

CREATE TABLE T1(  C1  NCHAR(1)  )

SET NOCOUNT ON

INSERT T1 VALUES( 'A' )
INSERT T1 VALUES( 'B' )

DECLARE @Str0 VARCHAR(4) 
DECLARE @Str1 VARCHAR(4) 
DECLARE @Str2 VARCHAR(4) 

SET @Str0 = ''
SET @Str1 = ''
SET @Str2 = ''

SELECT @Str0 = @Str0 + C1 FROM T1 ORDER BY C1
SELECT @Str1 = @Str1 + C1 FROM T1 ORDER BY LTRIM( RTRIM( C1 ) )
SELECT @Str2 = @Str2 + LTRIM( RTRIM( C1 ) ) FROM T1 ORDER BY C1

SELECT @Str0 'No functions applied to column.'
SELECT @Str1 'LTRIM() and RTRIM() applied to ORDER BY clause.'
SELECT @Str2 'SELECT list with LTRIM(RTRIM()) (Workaround)'

IF @Str1 <> @Str2
BEGIN
   PRINT ''
   PRINT 'Execution plan depends on where the functions are applied:'
   PRINT '=========================================================='
   PRINT ''

   SET @Str1 = ''
   SET @Str2 = ''

   SET STATISTICS PROFILE ON
   SELECT @Str1 = @Str1 + C1 FROM T1 ORDER BY LTRIM( RTRIM( C1 ) )
   SELECT @Str2 = @Str2 + LTRIM( RTRIM( C1 ) ) FROM T1 ORDER BY C1
   SET STATISTICS PROFILE OFF
END

SET NOCOUNT OFF

DROP TABLE T1
				

Vlastnosti

ID článku: 287515 - Poslední aktualizace: 16. října 2003 - Revize: 3.2
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Klíčová slova: 
kbmt kbcodesnippet kbprb KB287515 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:287515

Dejte nám zpětnou vazbu