Pierakstīties, izmantojot Microsoft
Pierakstīties vai izveidot kontu
Sveicināti!
Atlasīt citu kontu.
Jums ir vairāki konti
Izvēlieties kontu, ar kuru vēlaties pierakstīties.

Simptomi

Datorā, kurā darbojas sistēma Microsoft SQL Server 2008, apsveriet šādus scenārijus.

1. scenārijs

Varat norādīt vispārēju tabulas izteiksmi (CTE), izmantojot priekšrakstu WITH. Piemēram, palaidiet tālāk norādīto vaicājumu.

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

Pēc tam palaidiet šo vaicājumu.

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

Šajā scenārijā šis vaicājuma kešotais vaicājumu plāns saglabā nepareizas statement_start_offset un statement_end_offset vērtības. Tieši jūs pamanīsit, ka statement_end_offset vērtība ir mazāka par statement_start_offset vērtību, palaižot sys.dm_exec_query_stats dinamiskās pārvaldības skatu (DMV). Šīs problēmas dēļ veiktspējas atskaite var neizdoties, ja atskaitē tiek pieņemts, ka statement_start_offset vērtība vienmēr ir mazāka par statement_stop_offset vērtību.

2. scenārijs

Varat norādīt vispārēju tabulas izteiksmi, izmantojot priekšrakstu WITH, un izmantot pārkompilēšanas opciju. Piemēram, varat izveidot funkciju SQL Server 2008, izmantojot tālāk norādīto skriptu.

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

Ja palaižat vaicājumu "Select dbo. function1 ()", tiek parādīts šāds kļūdas ziņojums:

Pašreizējā komandā radās nopietna kļūda. Rezultāti, ja tādi ir, ir jāizmet.

Turklāt šī kļūda var rasties arī bez pārkompilēšanas opcijas, ja SQL Server piedzīvo smago servera trafiku.

3. scenārijs

Varat norādīt vispārējas tabulas izteiksmi, izmantojot priekšrakstu WITH. Priekšrakstā WITH norādiet tabulu, kas nepastāv. Piemēram, palaidiet tālāk norādīto vaicājumu.

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

Izpildot šo vaicājumu, trūkst kļūdas trūkstošajai tabulai.

Cēlonis

Šīs problēmas rodas, ja priekšraksta SELECT darbība ir nepareizas. Priekšraksts WITH izmanto šādu sintaksi.

WITH common_table_expression AS(CTE_query_definition)

Šis priekšraksts izveido rezultātu kopu, kas piešķirta biežāk lietotajam tabulas izteiksmes nosaukumam. Pēc tam šo priekšrakstu varat izpildīt, izmantojot priekšrakstu SELECT. Ja šis otrais priekšraksts ir ietverts iekavās un pēc tam mēģināt veikt darbības rezultātos vai mēģināt palaist sys.dm_exec_query_stats dinamiskās pārvaldības skatu, jūs saņemat nepareizus rezultātus vai kļūdas.

Risinājums

Informācija par servisa pakotni Lai atrisinātu šo problēmu, iegūstiet jaunāko SQL Server 2008 servisa pakotni. Lai iegūtu papildinformāciju, noklikšķiniet uz šī raksta numura, lai skatītu Microsoft zināšanu bāzes rakstu:

968382 Jaunākās SQL Server 2008 servisa pakotnes iegūšana

Risinājums

Lai novērstu šīs problēmas, ir jānoņem iekavas no priekšraksta, kas seko tipiskajai tabulas izteiksmei. Piemēram, apsveriet tālāk norādītās darbības ar priekšrakstiem, kas izmanto šādas iekavas.

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

Lai novērstu šīs problēmas, veiciet tālāk norādītās darbības ar priekšrakstu, kas neizmanto šīs iekavas.

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

Statusa

Microsoft ir apstiprinājusi, ka šī problēma pastāv Microsoft produktos, kas ir norādīti sadaļā "attiecas uz". Šī problēma pirmo reizi tika labota SQL Server 2008 2. servisa pakotnē (SP2).

Papildinformācija

Lai iegūtu papildinformāciju, kā izmantot priekšrakstu WITH ar vispārēju tabulas izteiksmi, apmeklējiet šo MSDN tīmekļa lapu:

AR common_table_expression (Transact-SQL)Lai iegūtu papildinformāciju par sys.dm_exec_query_stats, apmeklējiet šo MSDN tīmekļa lapu:

sys.dm_exec_query_stats (Transact-SQL)

Nepieciešama papildu palīdzība?

Vēlaties vairāk opciju?

Izpētiet abonementa priekšrocības, pārlūkojiet apmācības kursus, uzziniet, kā aizsargāt ierīci un veikt citas darbības.

Kopienas palīdz uzdot jautājumus un atbildēt uz tiem, sniegt atsauksmes, kā arī saņemt informāciju no ekspertiem ar bagātīgām zināšanām.

Vai šī informācija bija noderīga?

Cik lielā mērā esat apmierināts ar valodas kvalitāti?
Kas ietekmēja jūsu pieredzi?
Nospiežot Iesniegt, jūsu atsauksmes tiks izmantotas Microsoft produktu un pakalpojumu uzlabošanai. Jūsu IT administrators varēs vākt šos datus. Paziņojums par konfidencialitāti.

Paldies par jūsu atsauksmēm!

×