mit temporären Tabellen in SQL Azure
Schreibe ich eine Abfrage, um schwenkbarer Tisch-Elementen, wo die Spalte name wird dynamisch generiert.
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
Diese Abfrage funktioniert in meiner lokalen Datenbank, aber es funktioniert nicht in SQL Azure, da Globale temporäre Tabellen sind dort nicht erlaubt.
Nun, wenn ich eine änderung ##FINA
L #FINAL
in meiner lokalen Datenbank, aber es gibt mir Fehler wie
Ungültiger Objektname '#FINAL' .
Wie kann ich dieses Problem beheben?
- Ich glaube nicht, dass Ihr problem gelöst werden kann, da Sie versuchen zu konstruieren, die etwas (ein ResultSet mit einer Variablen Anzahl von Spalten), die nicht gut unterstützt, die von SQL. Im Allgemeinen Fall, diese Arbeit zu machen, hätten Sie zum erstellen der temp Tabelle in dem äußeren Umfang (d.h. vor der
EXECUTE
), aber Sie können nicht tun, wenn Sie nicht wissen, welche Spalten, die Sie gehen zu müssen. - Tatsächlich versuchte ich es bereits , habe ich eine temp in der Lage und setzen Sie die Spalte von Namen, die in @ in es . es dient nicht irgendeinem Zweck, da konnte ich nicht verwenden Sie es in der in-Klausel . ich.e FÜR SUBJECT_ID IN (SELECT cast(subject_id AS NVARCHAR), der AUS #SUBJECT_ID_TABLE )
- Nein, der Punkt war das erstellen der
#Final
temp-Tabelle vor denEXECUTE
- das ist der einzige Weg, um Zugang zu beiden Bereichen. Ich habe Ihnen gezeigt, eine Möglichkeit, die funktionieren könnte in meiner Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Okay, nach sagen, dass ich nicht denke, dass es getan werden könnte, ich könnte einen Weg haben. Es ist hässlich, obwohl. Wir hoffen, dass Sie spielen können, mit der im folgenden Beispiel und passen Sie es für Ihre Anfrage (ohne schema und die Daten, es ist zu schwierig für mich, zu versuchen, es zu schreiben):
Diese Taste wird zum erstellen der temp Tabelle in den äußeren Umfang, und dann die inneren Bereiche (code läuft innerhalb
EXEC
Aussagen) haben Zugriff auf die gleichen temp-Tabelle. Die oben arbeitete auf SQL Server 2008, aber ich glaube nicht, haben eine Azure-Instanz zu spielen, also nicht getestet.Wenn Sie erstellen eine temporäre Tabelle, es ist sichtbar von dynamischem sql-Code ausgeführt spid, wenn Sie die Tabelle erstellen, in der die dynamische sql ist nicht sichtbar außerhalb des.
Gibt es einen workaround. Sie können erstellen Sie eine stub-Tabelle und ändern Sie es in Ihrer dynamischen sql. Es erfordert ein wenig string-manipulation, aber ich habe diese Technik verwendet, um die Generierung von dynamischen Datensätzen für tsqlunit.
@cols
. Eine manipulation notwendig wäre, zu übersetzen@cols
ins alter-Anweisungen. Damien_The_Unbeliever schrieb ein vollständigeres Beispiel für diesen Ansatz.