2011-05-24 16 views
6

Esta pregunta se ha hecho antes -servidor SQL - usuario CTE en subconsulta

How we can use CTE in subquery in sql server?

La única respuesta fue sugerido "Simplemente defina el CTE en la parte superior y acceder a ella en la subconsulta?"

Esto funciona, pero realmente me gustaría ser capaz de utilizar un CTE en los siguientes escenarios -

  1. como una subconsulta en un SELECT

  2. como una tabla derivada en la cláusula FROM de un SELECCIONAR

Ambos funcionan en PostgreSQL. Con Sql Server 2005, obtengo "Sintaxis incorrecta cerca de la palabra clave 'con'".

La razón por la que me gustaría es porque la mayoría de mis consultas están construidas dinámicamente, y me gustaría poder definir un CTE, guardarlo en alguna parte y luego soltarlo en una consulta más compleja bajo demanda.

Si el servidor Sql simplemente no admite este uso, tendré que aceptarlo, pero no he leído nada que indique que no está permitido.

¿Alguien sabe si es posible hacer que esto funcione?

Respuesta

3

En SQL Server, los CTE deben estar en la parte superior de la consulta. Si construye consultas dinámicamente, puede almacenar una lista de CTE además de la consulta. Antes de enviar la consulta al servidor SQL, puede prefijar la consulta con una lista de CTE:

; with Cte1 as (...definition 1...), 
    Cte2 as (...definition 2...), 
    Cte3 as (...definition 3...), 
    ... 
...constructed query... 

Esto es suponiendo que usted está construyendo el exterior de SQL de SQL Server.

También podría considerar la creación de vistas. Las vistas pueden contener CTE, y se pueden usar como una subconsulta o una tabla derivada. Las vistas son una buena opción si genera SQL con poca frecuencia, por ejemplo, solo durante una instalación o como parte de una implementación.

1

SQL Server no es compatible con esta función tan necesaria. Yo también he estado buscando ayuda en esto. MS SQL Server no admite vistas temporales en oposición a PostgreSQL. La solución mencionada anteriormente también es probable que funcione solo si todas las definiciones de CTE pueden generarse de antemano y no tienen nombres conflictivos en cada una de las subconsultas, ya que el propósito es que estas definiciones de CTE pueden ser diferentes para cada nivel de una sub consulta.

Triste pero cierto !!!

Saludos, Kapil

Cuestiones relacionadas