Iniciar sesión con Microsoft
Iniciar sesión o crear una cuenta
Hola:
Seleccione una cuenta diferente.
Tiene varias cuentas
Elija la cuenta con la que desea iniciar sesión.

Síntomas

En un equipo que ejecuta Microsoft SQL Server 2008, tenga en cuenta los siguientes escenarios.

Situación 1

Para especificar una expresión de tabla común (CTE), use la instrucción WITH. Por ejemplo, ejecute la consulta siguiente.

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

Después ejecuta esta consulta.

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

En este escenario, el plan de consulta en caché de esta consulta almacena valores incorrectos de statement_start_offset y statement_end_offset. En concreto, observa que el valor de statement_end_offset es menor que el valor de statement_start_offset cuando ejecuta sys.dm_exec_query_stats vista de administración dinámica (DMV). Debido a este problema, se puede producir un error en un informe de rendimiento cuando el informe supone que el valor de statement_start_offset es siempre menor que el valor de statement_stop_offset.

Situación 2

Especifique una expresión de tabla común con la instrucción WITH y use la opción recompilar. Por ejemplo, se crea una función en SQL Server 2008 mediante la siguiente secuencia de comandos.

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

Cuando ejecuta una consulta "Select DBO. función1 ()", recibe el siguiente mensaje de error:

Se ha producido un error grave en el comando actual. Los resultados, si los hay, se deben descartar.

Además, este error puede producirse sin la opción recompilar si SQL Server experimenta un tráfico de servidor intenso.

Escenario 3

Para especificar una expresión de tabla común, use la instrucción WITH. En la instrucción WITH, se especifica una tabla que no existe. Por ejemplo, ejecute la consulta siguiente.

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

Al ejecutar esta consulta, no recibe un error para la tabla que falta.

Causa

Estos problemas se producen debido a un mal funcionamiento de una instrucción SELECT que sigue a una instrucción WITH. La instrucción WITH utiliza la sintaxis siguiente.

WITH common_table_expression AS(CTE_query_definition)

A continuación, esta instrucción crea un conjunto de resultados que se asigna al nombre de la expresión de tabla común que se especificó. Después, sigue esta instrucción con una instrucción SELECT. Si la segunda instrucción está entre paréntesis y, a continuación, intenta realizar una operación sobre los resultados o intenta ejecutar una vista de administración dinámica de sys.dm_exec_query_stats, recibirá resultados incorrectos o un error.

Resolución

Información de Service Pack Para resolver este problema, obtenga el Service Pack más reciente para SQL Server 2008. Si desea obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

968382 Cómo obtener el Service Pack más reciente para SQL Server 2008

Solución alternativa

Para evitar estos problemas, debe quitar los paréntesis de la instrucción que sigue a la expresión de tabla común. Por ejemplo, considere la siguiente instrucción WITH que usa estos paréntesis.

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

Para evitar estos problemas, cambie a la instrucción WITH siguiente que no use estos paréntesis.

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

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "se aplica a". Este problema se corrigió por primera vez en SQL Server 2008 Service Pack 2 (SP2).

Más información

Para obtener más información sobre cómo usar la instrucción WITH con una expresión de tabla común, visite la siguiente página web de MSDN:

CON common_table_expression (Transact-SQL)Para obtener más información sobre sys.dm_exec_query_stats, visite la siguiente página web de MSDN:

sys.dm_exec_query_stats (Transact-SQL)

¿Necesita más ayuda?

¿Quiere más opciones?

Explore las ventajas de las suscripciones, examine los cursos de aprendizaje, aprenda a proteger su dispositivo y mucho más.

Las comunidades le ayudan a formular y responder preguntas, enviar comentarios y leer a expertos con conocimientos extensos.

¿Le ha sido útil esta información?

¿Cuál es tu grado de satisfacción con la calidad del lenguaje?
¿Qué ha afectado a su experiencia?
Si presiona Enviar, sus comentarios se usarán para mejorar los productos y servicios de Microsoft. El administrador de TI podrá recopilar estos datos. Declaración de privacidad.

¡Gracias por sus comentarios!

×