Prisijunkite prie „Microsoft“
Prisijunkite arba sukurkite paskyrą.
Sveiki,
Pasirinkti kitą paskyrą.
Turite kelias paskyras
Pasirinkite paskyrą, kurią naudodami norite prisijungti.

Simptomai

Kompiuteryje, kuriame veikia "Microsoft SQL Server" 2008, Apsvarstykite šiuos scenarijus.

1 scenarijus

Galite nurodyti bendrą lentelės reiškinį (CTE) naudodami sakinį WITH. Pvz., vykdote šią užklausą.

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

Tada vykdykite šią užklausą.

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

Pagal šį scenarijų talpyklos užklausos planas šiai užklausai saugo neteisingus statement_start_offset ir statement_end_offset reikšmes. Tiksliau sakant, pastebite, kad statement_end_offset reikšmė yra mažesnė nei statement_start_offset reikšmė, kai paleidžiate sys.dm_exec_query_stats dinaminio valdymo rodinį (DMV). Dėl šios problemos našumo ataskaita gali nepavykti, jei ataskaitoje manoma, kad statement_start_offset reikšmė visada yra mažesnė už statement_stop_offset reikšmę.

2 scenarijus

Galite nurodyti bendrą lentelės reiškinį naudodami sakinį WITH ir naudokite funkciją PERKOMPILIUOTI. Pvz., "SQL Server 2008" sukuriate funkciją naudodami šį scenarijų.

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

Kai vykdote užklausą "pasirinkite dbo. function1 ()", gaunate šį klaidos pranešimą:

Dabartinėje komandoje įvyko rimta klaida. Rezultatai, jei jų yra, turi būti šalinami.

Be to, ši klaida gali įvykti be PERKOMPILIAVIMO parinkties, jei SQL serveris patiria sunkių serverių srautą.

3 scenarijus

Galite nurodyti bendrą lentelės reiškinį naudodami sakinį WITH. Sakinyje WITH galite nurodyti lentelę, kurios nėra. Pvz., vykdote šią užklausą.

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

Kai vykdote šią užklausą, negausite klaidos dėl trūkstamos lentelės.

Priežastis

Šios problemos kyla dėl netinkamo sakinio, kuris atitinka sakinį, apdorojimo. Sakinys WITH naudoja šią sintaksę.

WITH common_table_expression AS(CTE_query_definition)

Šis sakinys sukuria rezultatų rinkinį, priskirtą įprastam lentelės reiškinio pavadinimui, kuris buvo nurodytas. Tada vykdykite šį sakinį naudodami sakinį SELECT. Jei antrasis sakinys yra skliaustuose, tada bandote atlikti veiksmo rezultatus arba bandote paleisti sys.dm_exec_query_stats dinaminio valdymo rodinį, gaunate neteisingus rezultatus arba klaidą.

Sprendimas

Paslaugų paketo informacija Norėdami išspręsti šią problemą, Įsigykite naujausią "SQL Server 2008" pakeitimų paketą. Jei reikia daugiau informacijos, spustelėkite toliau esantį straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:

968382 Kaip įsigyti naujausią "SQL Server 2008" pakeitimų paketą

Sprendimas

Norėdami išspręsti šias problemas, turite pašalinti skliaustus iš teiginio, kuris atitinka bendrą lentelės reiškinį. Pavyzdžiui, atsižvelkite į šiuos skliaustus, naudodami sakinį.

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

Norėdami išspręsti šias problemas, atlikite toliau nurodytus veiksmus, naudodami sakinį, kuris nenaudoja šių skliaustelių.

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

Statusą

"Microsoft" patvirtino, kad tai yra "Microsoft" produktų, išvardytų skyriuje "taikoma", problema. Ši problema pirmą kartą ištaisyta SQL serverio 2008 2 pakeitimų pakete (SP2).

Daugiau informacijos

Daugiau informacijos apie tai, kaip naudoti sakinį su bendrosios lentelės išraiška, rasite apsilankę šioje MSDN svetainėje:

SU common_table_expression (Transact-SQL)Jei norite gauti daugiau informacijos apie sys.dm_exec_query_stats, apsilankykite šioje MSDN svetainėje:

sys.dm_exec_query_stats (Transact-SQL)

Reikia daugiau pagalbos?

Norite daugiau parinkčių?

Sužinokite apie prenumeratos pranašumus, peržiūrėkite mokymo kursus, sužinokite, kaip apsaugoti savo įrenginį ir kt.

Bendruomenės padeda užduoti klausimus ir į juos atsakyti, pateikti atsiliepimų ir išgirsti iš ekspertų, turinčių daug žinių.

Ar ši informacija buvo naudinga?

Ar esate patenkinti kalbos kokybe?
Kas turėjo įtakos jūsų įspūdžiams?
Paspaudus mygtuką Pateikti, jūsų atsiliepimai bus naudojami tobulinant „Microsoft“ produktus ir paslaugas. Jūsų IT administratorius galės rinkti šiuos duomenis. Privatumo patvirtinimas.

Dėkojame už jūsų atsiliepimą!

×