2010-12-15 12 views
0

I 2 store Verfahren haben:Temporäre Tabelle Probleme in SQL Server

Die erste #TempTable

CREATE PROCEDURE CreateTempTable 
AS 
BEGIN 
    IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL 
    BEGIN 
     DROP TABLE #TempTable; 
    END 

    CREATE TABLE #TempTable(
     Value real NOT NULL   
END 

die zweite einfügen Daten in meinem #TempTable

CREATE PROCEDURE InsertData 
     @Value real 
    AS 
    BEGIN 
     INSERT #TempTable (Value) VALUES @Value 
    END 

zu erstellen Wenn ich diese Prozedur anrufe, habe ich einen Fehler:

exec CreateTempTable 
exec InsertData" 1 
go 

Name '#TempTable' nicht in InsertData

Können Sie mir helfen?

Antwort

2

Eine temporäre Tabelle, die in einem Sproc erstellt wird, wird automatisch gelöscht, nachdem der Sproc beendet wurde.

Sie haben ein paar Möglichkeiten:

  • die temporäre Tabelle als eigenständige Abfrage außerhalb des sproc erstellen. Dann wird es gelöscht werden, nachdem die Verbindung schließt
  • eine sproc erstellen, die zuerst die temporäre Tabelle erstellt und ruft dann die anderen sprocs
  • Verwenden Sie eine globale temporäre Tabelle (Vorsicht - Concurrency Probleme können mit dieser auftauchen)
1

Ich vermute das Problem hier ist, dass Sie eine lokale temporäre Tabelle erstellen, die nicht außerhalb CreateTempTable zugegriffen werden kann. Sie sollten eine globale temporäre Tabelle erstellen, indem Sie ## statt # verwenden.

Bearbeiten Ja, das ist es. Hier ist Ihr festes Skript:

+0

Globale temporäre Tabellen haben Konfliktprobleme, wenn der Sproc von mehr als einem Benutzer gleichzeitig ausgeführt wird. Es ist wahrscheinlich keine gute Idee, es global zu machen und es einen Tag zu nennen. – Donnie

+0

Ja, aber das war * nicht * was das OP verlangt hat. Wie auch immer, danke für die Info. – rsenna

Verwandte Themen