recursive - Combine CTE “WITH” y un “WITH XMLNAMESPACES…” en SQL Server
sql server cte recursive (1)
¿Alguien ha logrado crear un CTE en el T-SQL de SQL Server que también incluye una declaración WITH XMLNAMESPACES
?
Parece que las dos palabras clave WITH
insisten en ser el "primero en el lote de T-SQL", y eso no funciona ...
Lo intenté:
WITH XMLNAMESPACES(''http://schemas.myself.com/SomeSchema'' as ns)
WITH CTEQuery AS
(
SELECT (list of fields)
FROM dbo.MyTable
WHERE (conditions)
)
SELECT * FROM CTEQuery
No funcionó :-( (errores de sintaxis)
Msg 156, Nivel 15, Estado 1, Línea 2
Sintaxis incorrecta cerca de la palabra clave ''WITH''.
Msg 319, nivel 15, estado 1, línea 2
Sintaxis incorrecta cerca de la palabra clave ''con''. Si esta declaración es una expresión de tabla común, una cláusula xmlnamespaces o una cláusula de contexto de seguimiento de cambios, la instrucción anterior debe terminar con un punto y coma.
Así que intenté preparar el segundo WITH
con un punto y coma:
WITH XMLNAMESPACES(''http://schemas.myself.com/SomeSchema'' as ns)
;WITH CTEQuery AS
(
SELECT (list of fields)
FROM dbo.MyTable
WHERE (conditions)
)
SELECT * FROM CTEQuery
y obtuve esto:
Mensaje 102, Nivel 15, Estado 1, Línea 2
Sintaxis incorrecta cerca '';''.
y luego intenté colocar WITH XMLNAMESPACES
en el CTE:
WITH CTEQuery AS
(
WITH XMLNAMESPACES(''http://schemas.myself.com/SomeSchema'' as ns)
SELECT (list of fields)
FROM dbo.MyTable
WHERE (conditions)
)
SELECT * FROM CTEQuery
y obtuve esto:
Msg 156, Nivel 15, Estado 1, Línea 4
Sintaxis incorrecta cerca de la palabra clave ''WITH''.
Msg 319, nivel 15, estado 1, línea 4
Sintaxis incorrecta cerca de la palabra clave ''con''. Si esta declaración es una expresión de tabla común, una cláusula xmlnamespaces o una cláusula de contexto de seguimiento de cambios, la instrucción anterior debe terminar con un punto y coma.
Mensaje 102, Nivel 15, Estado 1, Línea 21
Sintaxis incorrecta cerca '')''.
Entonces, ¿cómo diablos hago esto?
Use una coma en lugar del segundo WITH
, por ejemplo
WITH XMLNAMESPACES(''http://schemas.myself.com/SomeSchema'' as ns)
,CTEQuery AS
(
SELECT (list of fields)
FROM dbo.MyTable
WHERE (conditions)
)
SELECT * FROM CTEQuery
Lo mismo si quieres múltiples expresiones CTE. Solo necesita especificar WITH
una vez, y luego todos los demás bloques WITH
solo usan una coma en lugar de la palabra clave.