Oprava: Nesprávné výsledky při použití závorek vyberte v příkazu, který má společný výraz tabulky SQL Server 2008

Překlady článku Překlady článku
ID článku: 2322209 - 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

V počítači se systémem Microsoft SQL Server 2008 zvažte následující scénáře.

Scénář 1

Pomocí příkazu WITH zadáte výraz společné tabulky (CTE). Například spustíte následující dotaz.
WITH common_table_expression AS 

(SELECT * FROM sys.objects)

(SELECT *

FROM common_table_expression)
Pak spusťte dotaz.
SELECT *

FROM sys.dm_exec_query_stats

WHERE statement_start_offset > statement_end_offset

AND

statement_end_offset <> -1
V tomto případě ukládá plán dotazů uložený v mezipaměti pro tento dotaz nesprávné statement_start_offset a statement_end_offset hodnot. Konkrétně zjistíte že při spuštění zobrazení dynamickou správu sys.dm_exec_query_stats (DMV) je menší než hodnota statement_start_offset hodnota statement_end_offset.

Z důvodu tohoto problému sestava výkonnosti může selhat, pokud sestava předpokládá, že hodnota statement_start_offset je vždy menší než hodnota statement_stop_offset.

Scénář 2

Určit společné výraz tabulky pomocí příkazu WITH a volba KOMPILACE. Například vytvoříte funkci serveru SQL Server 2008 pomocí následujícího skriptu.
CREATE FUNCTION function1() RETURNS int AS
BEGIN
DECLARE @x int
SET @x=1;
WITH common_table_expression AS

(SELECT @x AS column1)

(SELECT @x=column1 FROM common_table_expression)

OPTION(RECOMPILE)
RETURN @x
END
Při spuštění dotazu "select dbo.function1()", zobrazí se následující chybová zpráva:
V aktuálním příkazu došlo k závažné chybě. Výsledky, případně by zrušeny.

Navíc tato chyba může nastat bez možnosti KOMPILACE v případě, že máte silný provoz na serveru SQL server.

Scénář 3

Společné tabulky výrazu zadáte pomocí příkazu WITH. V příkazu WITH Určete tabulku, která neexistuje. Například spustíte následující dotaz.
WITH computed_table (id) AS
(SELECT id 
FROM this_table_does_not_exist) 
(SELECT id 
FROM dbo.computed_table) 
GO
Při spuštění tohoto dotazu není chybová chybějící tabulky.

Příčina

K těmto problémům dochází z důvodu nefunkční zpracování příkazu SELECT, který následuje příkaz WITH. Příkaz WITH používá následující syntaxi.
WITH common_table_expression AS

(CTE_query_definition)
Příkaz pak vytvoří sadu výsledků, přiřazená společný název tabulky výraz, který byl zadán. Potom postupujte podle tohoto prohlášení se příkaz SELECT. Pokud tento druhý příkaz je uzavřena v závorkách a pokusu o provedení operace na výsledky nebo spustíte zobrazení dynamickou správu sys.dm_exec_query_stats, obdržíte nesprávné výsledky nebo došlo k chybě.

Řešení

Informace o aktualizaci Service pack

Tento problém vyřešíte pomocí nejnovější aktualizace service pack pro SQL Server 2008. Další informace získáte klepnutím na následující číslo článku databáze Microsoft Knowledge Base:
968382 Jak získat nejnovější aktualizaci service pack pro SQL Server 2008

Jak potíže obejít

Chcete-li tyto problémy vyřešit, bude nutné odebrat závorky z příkazu, který následuje výraz společné tabulky. Například zvažte následující s příkazem, který používá tyto závorky.
WITH common_table_expression AS 

(SELECT *
FROM sys.objects)

(SELECT *

FROM common_table_expression)
Chcete-li tyto problémy vyřešit, změňte následující příkaz, který nepoužívá tyto závorky.
WITH common_table_expression AS 

(SELECT *
FROM sys.objects)
SELECT *

FROM common_table_expressio

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části "Platí pro".

Tento problém byl poprvé opraven v aktualizaci SQL Server 2008 Service Pack 2 (SP2).


Další informace

Další informace o použití příkazu s výrazem společné tabulky naleznete na následující webové stránce MSDN:
S common_table_expression (Transact-SQL)
Další informace o sys.dm_exec_query_stats navštivte následující webovou stránku MSDN:
sys.dm_exec_query_stats (Transact-SQL)

Vlastnosti

ID článku: 2322209 - Poslední aktualizace: 17. května 2011 - Revize: 4.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Workgroup
Klíčová slova: 
kbqfe kbfix kbexpertiseadvanced kbtshoot kbquery kbmt KB2322209 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:2322209

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