SQL Server zeigt beim Arbeiten mit einer temporären Tabelle den ungültigen Objektnamen '#temp' an

8

Ich habe eine Prozedur erstellt

%Vor%

Wenn ich die Prozedur testProcedure_One ausführe, erhalte ich folgende Fehlermeldung:

%Vor%

Aber wenn ich ##temp means verwende, funktioniert es:

%Vor%

testProcedure_two funktioniert einwandfrei

Was könnte das Problem sein? Wie kann ich es lösen?

    
Jebli 12.08.2009, 11:09
quelle

3 Antworten

12

Vermutlich haben Sie folgenden Code, der SELECT von #temp, geben Sie den Fehler?

Es hängt vom Umfang ab. ## temp ist eine globale temporäre Tabelle, die in anderen Sitzungen verfügbar ist. #temp ist eine "lokale" temporäre Tabelle, auf die nur der aktuell ausgeführte Bereich zugreifen kann. sp_executesql wird in einem anderen Bereich ausgeführt und daher werden die Daten in #temp eingefügt, aber wenn Sie dann versuchen, auf diese Tabelle außerhalb des Aufrufs sp_executesql zuzugreifen, wird sie nicht gefunden.

z.B. Dieser Fehler als #Test wird erstellt und ist nur für den Kontext "sp_executesql" sichtbar:

%Vor%

Das obige funktioniert mit ## Test, da es eine globale temporäre Tabelle erstellt.

Dies funktioniert, da SELECT Teil desselben Bereichs ist.

%Vor%

Meine Fragen wären:

  1. Müssen Sie wirklich temporäre Tabellen verwenden, können Sie keine Lösung finden, ohne dass Sie z. eine Unterabfrage?
  2. Müssen Sie sql wirklich mit sp_executesql ausführen?
AdaTheDev 12.08.2009, 11:19
quelle
1

für Sie ausführen Ich denke, dass die # tmp_table zuerst mit einer ddl-Anweisung erstellt werden sollte.

Dann führen Sie Ihre Exec aus und der gespeicherte Proc, den Sie in der Exec erstellt haben, sollte den gleichen Namen temp table viz.#tmp_table haben.

    
mahesh 09.06.2011 16:06
quelle
0

Erstellen Sie die temporäre Tabelle mit CREATE TABLE und verwenden Sie INSERT INTO , um die Werte anstelle von SELECT INTO einzufügen.

Das hat das Problem für mich behoben.

    
Bhoopathi Reddy 09.09.2016 05:29
quelle