Seite 1 von 1

Temporäre Tabellennamen [ERLEDIGT]

Verfasst: Mi, 27. Apr 2016 11:26
von UliTs
Hallo allerseits,

ich benutze inzwischen intensiv SQL-Scripts.
In einem sehr aufwändigen Script benutze ich zusätzlich temporäre Tabellen z.B. mit Namen #Tmp1,#Tmp2 etc.
Als Ergebnis gibt es schließlich eine Tabelle #TmpErgebnis, welche ich in einer View mittels

Code: Alles auswählen

select * from #TmpErgebnis
zurückgebe. Alle anderen temporären Tabellen lösche ich bereits innerhalb des Scripts wieder.
Wenn ich nun diese View innerhalb der gleichen Connection mehrfach gleichzeitig geöffnet haben will kommt es logischerweise zu einem Konflikt, da es die Tabelle #TmpErgebnis ja nur 1x geben kann.
Lösung vermutlich: mit variablen Tabellennamen arbeiten
Gibt es beim ADS eine Funktion, die mir so einen Tabellennamen (der noch nicht verwendet wird) generiert?

Re: Temporäre Tabellennamen

Verfasst: Mi, 27. Apr 2016 12:06
von UliTs
Inzwischen habe ich folgendes herausgefunden.
Ich kann mir einen temporären Tabellennamen generieren:

Code: Alles auswählen

declare FileName string;
set FileName = '#'+NewIdString( "F" );
Nur wie verwende ich diesen?
Z.B.

Code: Alles auswählen

select * into FileName from Personen where Id<6;
erzeugt eine Tabelle mit Namen "FileName"...

Re: Temporäre Tabellennamen

Verfasst: Mi, 27. Apr 2016 12:30
von hschmidt
Hallo Uli,

nicht getestet, aber in der ADS-Hilfe wird empfohlen, Variablen mit einem führenden '@' zu deklarieren:

Code: Alles auswählen

DECLARE @empid Integer;

@empid = 1;

UPDATE employees SET ManagerID = @empid WHERE branch = 'R&D';
 
Viele Grüße

Hans

Re: Temporäre Tabellennamen [ERLEDIGT]

Verfasst: Mi, 27. Apr 2016 15:39
von UliTs
Hallo Hans,

danke für Deinen Tipp. Aber leider habe ich damit auch keine Lösung gefunden.
Aber mit Hilfe von Stored Procedures klappt es :D . Ich kann nach füllen der Tabelle __Output die temporäre Tabelle sofort löschen.
Dann ist es egal, wenn ich einen fixen temporären Tabellennamen angeben muß :D :D :

Code: Alles auswählen

  INSERT INTO __Output select * from #Tmp5;
  TRY DROP TABLE #Tmp5; CATCH ALL END TRY;
Uli