Estoy escribiendo una consulta a los elementos de la tabla pivotante donde se genera dinámicamente el nombre de la columna.usando tablas temporales en SQL Azure
SET @query = N'SELECT STUDENT_ID, ROLL_NO, TITLE, STUDENT_NAME, EXAM_NAME, '+
@cols +
' INTO ##FINAL
FROM
(
SELECT *
FROM #AVERAGES
UNION
SELECT *
FROM #MARKS
UNION
SELECT *
FROM #GRACEMARKS
UNION
SELECT *
FROM #TOTAL
) p
PIVOT
(
MAX([MARKS])
FOR SUBJECT_ID IN
('+
@cols +')
) AS FINAL
ORDER BY STUDENT_ID ASC, DISPLAYORDER ASC, EXAM_NAME ASC;'
EXECUTE(@query)
select * from ##FINAL
Esta consulta funciona correctamente en mi base de datos local, pero no funciona en SQL Azure ya que las tablas temporales globales no están permitidas allí.
Ahora si cambio ##FINA
L a #FINAL
en mi base de datos local, pero me da error como
nombre de objeto no válido '#FINAL'.
¿Cómo puedo resolver este problema?
No creo que su problema específico pueda ser resuelto, ya que está tratando de construir algo (un conjunto de resultados con un número variable de columnas) que SQL no soporta bien. En el caso general, para que esto funcione, debe crear la tabla temporal en el ámbito externo (es decir, antes del 'EJECUTAR'), pero no puede hacer eso cuando no sabe qué columnas está yendo a necesitar. –
En realidad ya lo intenté, creé un temp able y coloqué los nombres de las columnas que están en @. no sirve para nada porque no pude usarlo en la cláusula in. es decir, PARA SUBJECT_ID EN (SELECT cast (subject_id AS NVARCHAR) FROM #SUBJECT_ID_TABLE) –
No, el objetivo era crear la tabla temporal '# Final' antes de' EXECUTE' - esa es la única forma de tener acceso a ella en ambos ámbitos . He mostrado una manera que podría funcionar en mi respuesta. –