KB232209 - Ispravka: Netačni rezultati ako koristite zagrade oko FUNKCIJE SELECT u naredbi koja ima zajednički izraz tabele u sistemu SQL Server 2008

Simptomi

Na računaru koji radi pod sistemom Microsoft SQL Server 2008 razmotrite sledeće scenarije.

1. scenario

Pomoću izraza WITH navodite zajednički izraz tabele (CTE). Na primer, pokrenete sledeći upit.

WITH common_table_expression AS (SELECT * FROM sys.objects)(SELECT * FROM common_table_expression)

Zatim pokrenete ovaj upit.

SELECT *FROM sys.dm_exec_query_statsWHERE statement_start_offset > statement_end_offsetANDstatement_end_offset <> -1

U ovom scenariju, keširani plan upita za ovaj upit skladišti netačne statement_start_offset i statement_end_offset vrednosti. Konkretno, primećujete da statement_end_offset vrednost manja od statement_start_offset vrednosti kada pokrenete sys.dm_exec_query_stats dinamički prikaz upravljanja (DMV). Zbog ovog problema, izveštaj o performansama može da ne uspe kada izveštaj pretpostavi da statement_start_offset vrednost uvek manja od statement_stop_offset vrednosti.

2. scenario

Pomoću izraza "WITH" navodite zajednički izraz tabele i koristite opciju "PONOVO SVRŠi". Na primer, funkciju kreirate u sistemu SQL Server 2008 pomoću sledeće skripte.

CREATE FUNCTION function1() RETURNS int ASBEGINDECLARE @x intSET @x=1;WITH common_table_expression AS (SELECT @x AS column1) (SELECT @x=column1 FROM common_table_expression) OPTION(RECOMPILE)RETURN @xEND

Kada pokrenete upit "izaberi dbo.function1()", dobijate sledeću poruku o grešci:

Došlo je do ozbiljne greške na trenutnoj komandi. Rezultati, ako ih ima, treba da budu odbačeni.

Pored toga, do ove greške može doći bez opcije PONOVNOG IZVRŠAVANJA ako SQL server ima težak promet na serveru.

Scenario 3

Pomoću izraza WITH navodite zajednički izraz tabele. U izvodu WITH navodite tabelu koja ne postoji. Na primer, pokrenete sledeći upit.

WITH computed_table (id) AS(SELECT id FROM this_table_does_not_exist) (SELECT id FROM dbo.computed_table) GO

Kada pokrenete ovaj upit, nećete dobiti grešku za tabelu koja nedostaje.

Uzrok

Do ovih problema dolazi zbog neispravne obrade izjave SELECT koja sledi nakon izvoda SA. Izvod WITH koristi sledeću sintaksu.

WITH common_table_expression AS(CTE_query_definition)

Ova izjava zatim kreira skup rezultata koji je dodeljen zajedničkom imenu izraza tabele koje je navedeno. Zatim sledite ovu izjavu sa izjavom SELECT. Ako je ova druga izjava stavljena u zagrade, a zatim pokušate da izvršite operaciju sa rezultatima ili pokušate da pokrenete sys.dm_exec_query_stats dinamički prikaz upravljanja, dobijate netačne rezultate ili grešku.

Rešenje

Informacije o servisnom paketu Da biste rešili ovaj problem, nabavite najnoviji servisni paket za SQL Server 2008. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

968382 Nabavljanje najnovijeg servisnog paketa za SQL Server 2008

Rešenje

Da biste otklonili ove probleme, morate da uklonite zagrade iz izvoda koji sledi iza zajedničkog izraza tabele. Na primer, uzmite u obzir sledeću SA izjavu koja koristi takve zagrade.

WITH common_table_expression AS (SELECT *FROM sys.objects)(SELECT * FROM common_table_expression)

Da biste zaobišli ove probleme, promenite na sledeću SA izjavu koja ne koristi ove zagrade.

WITH common_table_expression AS (SELECT *FROM sys.objects)SELECT * FROM common_table_expressio

Status

Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku "Odnosi se na". Ovaj problem je prvi put ispravljen u SQL Server 2008 servisnom paketu 2 (SP2).

Više informacija

Za više informacija o korišćenju izraza WITH sa uobičajenim izrazom tabele posetite sledeću MSDN Veb stranicu:

SA common_table_expression (Transact-SQL)Za više informacija o sys.dm_exec_query_stats posetite sledeću MSDN Veb stranicu:

sys.dm_exec_query_stats (Transact-SQL)

Potrebna vam je dodatna pomoć?

Unapredite veštine
Istražite obuku
Prvi nabavite nove funkcije
Pridružite se Microsoft insajdere

Da li su vam ove informacije koristile?

Hvala vam na povratnim informacijama!

Hvala za povratne informacije! Izgleda da će biti od pomoći ako vas povežemo sa našim agentima Office podrške.

×