microsoft full descargar caracteristicas sql sql-server

full - sql server descargar



Error de "nombre de columna no válido" en la declaración SQL de los resultados de OpenQuery (4)

Está utilizando "Valor" como un alias de columna, y no creo que el alias pueda aparecer en la cláusula where. Simplemente se usa para nombrar el valor de columna devuelto. Su cláusula where debe hacer referencia al nombre de columna original:

SELECT "Ugly OLAP name" as "Value" FROM OpenQuery( OLAP, ''OLAP Query'') WHERE "Ugly OLAP name" > 0

Estoy tratando de realizar una consulta SQL a través de un servidor SSAS vinculado. La consulta inicial funciona bien:

SELECT "Ugly OLAP name" as "Value" FROM OpenQuery( OLAP, ''OLAP Query'')

Pero si trato de agregar:

WHERE "Value" > 0

Me sale un error

Nombre de columna inválido ''Value''

¿Alguna idea de lo que podría estar haciendo mal?

Entonces, el problema era que el orden en que se procesan los elementos de la consulta es diferente del orden en que se escriben. De acuerdo con esta fuente:

http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx

El orden de evaluación en MSSQL es:

  1. DE
  2. EN
  3. UNIRSE
  4. DÓNDE
  5. AGRUPAR POR
  6. TENIENDO
  7. SELECCIONAR
  8. ORDEN POR

Entonces el alias no fue procesado hasta después de las cláusulas WHERE y HAVING.


Esto debería funcionar:

SELECT A.Value FROM ( SELECT "Ugly OLAP name" as "Value" FROM OpenQuery( OLAP, ''OLAP Query'') ) AS a WHERE a.Value > 0

No es que Value sea una palabra reservada, el problema es que es un alias de columna, no el nombre de columna. Al convertirlo en una vista en línea, "Valor" se convierte en el nombre de la columna y luego puede usarse en una cláusula where.


Oh, qué diablos. Acabo de ver, seleccionas AS FOO. ¿No necesitas un HAVING claus en este caso?

SELECT whatever AS value FROM table HAVING value > 1;

Todavía no usaría "valor". ¡Pero para estar seguro, búscalo en tus documentos!


Puedo responder por dejarlo fuera de GROUP BY. La buena noticia es que funciona perfectamente como un simple alias seleccionado antiguo.