with recursive postgres cte consulta common comando sql-server common-table-expression

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.