Problemas al intentar ejecutar CTE en SQL Express 2008

24/07/2009 - 23:45 por Javier | Informe spam
Que tal,

He empezado a seguir los ejemplos de un libro, y al intentar hacer algo como
esto:

WITH TopSales(SalesPersonID,TerritoryID,NumberOfSales) AS
(
SELECT SalesPersonID,TerritoryID COUNT(*)
FROM Sales.SalesOrderHeader
GROUP BY SalesPersonID, TerritoryID
)

Me arroja el siguiente error:

" Mens. 102, Nivel 15, Estado 1, Línea 3
Sintaxis incorrecta cerca de '('. "

No tengo idea de que pueda ser, he buscado algo referente a la creación de
CTE, para comprobar la sintaxis y no he localizado aún el error.

Alguna ayuda, por favor.

Gracias

Saludos
Javier Parada

Preguntas similare

Leer las respuestas

#1 Carlos M. Calvelo
25/07/2009 - 07:53 | Informe spam
Hola Javier,

On 24 jul, 23:45, "Javier" wrote:
Que tal,

He empezado a seguir los ejemplos de un libro, y al intentar hacer algo como
esto:

WITH TopSales(SalesPersonID,TerritoryID,NumberOfSales) AS
(
        SELECT SalesPersonID,TerritoryID COUNT(*)



Aquí te falta una coma entre TerritoryID y COUNT(*)


        FROM Sales.SalesOrderHeader
        GROUP BY SalesPersonID, TerritoryID
)



Y aquí tendrás que hacer algo con el TopSales(...) que se define con
el WITH.



Me arroja el siguiente error:

" Mens. 102, Nivel 15, Estado 1, Línea 3
    Sintaxis incorrecta cerca de '('.        "

No tengo idea de que pueda ser, he buscado algo referente a la creación de
CTE, para comprobar la sintaxis y no he localizado aún el error.




Prueba, por ejemplo, así:

WITH TopSales(SalesPersonID,TerritoryID,NumberOfSales) AS
(
SELECT SalesPersonID,TerritoryID, COUNT(*)
FROM Sales.SalesOrderHeader
GROUP BY SalesPersonID, TerritoryID
)
SELECT * FROM TopSales

Saludos,
Carlos
Respuesta Responder a este mensaje
#2 Javier
25/07/2009 - 08:22 | Informe spam
Hola Carlos, Gracias por contestar, efectivamente, como comente que recién
empiezo, lo que yo quería era "ver" que se generara bien la definición del
CTE, sin saber que parte de la sintaxis es, precisamente:

Syntax
[ WITH <common_table_expression> [ ,...n ] ]

<common_table_expression>:: expression_name [ ( column_name [ ,...n ] ) ]
AS
( CTE_query_definition )

CTE_query_definition
Specifies a SELECT statement whose result set populates the common table
expression. The SELECT statement for CTE_query_definition must meet the same
requirements as for creating a view, except a CTE cannot define another CTE.
For more information, see the Remarks section and CREATE VIEW
(Transact-SQL).

Por lo tanto me estaba faltando la parte de la ejecución de la consulta
(digamos que en la primer parte se define el CTE y en la segunda se ejecuta,
Vamos así lo entiendo yo) y esta finalmente queda de la siguiente forma:

WITH TopSales (SalesPersonID,TerritoryID,NumberOfSales)
AS
(
SELECT SalesPersonID,TerritoryID, COUNT(*)
FROM Sales.SalesOrderHeader
GROUP BY SalesPersonID, TerritoryID
)
SELECT * FROM TopSales
WHERE SalesPersonID IS NOT NULL
ORDER BY NumberOfSales DESC

Gracias

Saludos
Javier Parada

"Carlos M. Calvelo" escribió en el mensaje de
noticias:
Hola Javier,

On 24 jul, 23:45, "Javier" wrote:
Que tal,

He empezado a seguir los ejemplos de un libro, y al intentar hacer algo
como
esto:

WITH TopSales(SalesPersonID,TerritoryID,NumberOfSales) AS
(
SELECT SalesPersonID,TerritoryID COUNT(*)



Aquí te falta una coma entre TerritoryID y COUNT(*)


FROM Sales.SalesOrderHeader
GROUP BY SalesPersonID, TerritoryID
)



Y aquí tendrás que hacer algo con el TopSales(...) que se define con
el WITH.



Me arroja el siguiente error:

" Mens. 102, Nivel 15, Estado 1, Línea 3
Sintaxis incorrecta cerca de '('. "

No tengo idea de que pueda ser, he buscado algo referente a la creación
de
CTE, para comprobar la sintaxis y no he localizado aún el error.




Prueba, por ejemplo, así:

WITH TopSales(SalesPersonID,TerritoryID,NumberOfSales) AS
(
SELECT SalesPersonID,TerritoryID, COUNT(*)
FROM Sales.SalesOrderHeader
GROUP BY SalesPersonID, TerritoryID
)
SELECT * FROM TopSales

Saludos,
Carlos

Respuesta Responder a este mensaje
#3 Carlos M. Calvelo
25/07/2009 - 08:46 | Informe spam
Hola Javier,

On 25 jul, 08:22, "Javier" wrote:

Por lo tanto me estaba faltando la parte de la ejecución de la consulta
(digamos que en la primer parte se define el CTE y en la segunda se ejecuta,
Vamos así lo entiendo yo) y esta finalmente queda de la siguiente forma:




Quizás sea mejor no pensar en terminos de 'ejecución' sino
en que el WITH crea un contexto donde se define una tabla
(por medio del table expression) y en la segunda parte, en
ese contexto, se utiliza esa tabla.

Pero bueno... un juego de palabras? :-)

Saludos,
Carlos
Respuesta Responder a este mensaje
#4 Javier
26/07/2009 - 03:00 | Informe spam
Hola Carlos,

Gracias por la aclaración de conceptos, la tomare en cuenta.

Saludos
Javier Parada
Respuesta Responder a este mensaje
#5 Alejandro Mesa
27/07/2009 - 14:34 | Informe spam
Pero bueno... un juego de palabras? :-)



Que bueno que el juego de palabras no era en holandes, si no todavia yo
estuviese trabado con esto de las CTEs :))


AMB


"Carlos M. Calvelo" wrote:

Hola Javier,

On 25 jul, 08:22, "Javier" wrote:
>
> Por lo tanto me estaba faltando la parte de la ejecución de la consulta
> (digamos que en la primer parte se define el CTE y en la segunda se ejecuta,
> Vamos así lo entiendo yo) y esta finalmente queda de la siguiente forma:
>

Quizás sea mejor no pensar en terminos de 'ejecución' sino
en que el WITH crea un contexto donde se define una tabla
(por medio del table expression) y en la segunda parte, en
ese contexto, se utiliza esa tabla.

Pero bueno... un juego de palabras? :-)

Saludos,
Carlos

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida