Átmeneti táblák
Az átmeneti táblák hasonlítanak a hagyományos táblákra, azzal a különbséggel, hogy az előbbiek a tempdb adatbázisban jönnek létre, és ha már nincs szükség rájuk, akkor automatikusan törlődnek. Kétféle átmeneti tábla létezik: lokális és globális. Ezek a típusok egyaránt különböznek a láthatóságukban, az elérhetőségükben és a neveikben is. A helyi átmeneti táblák elnevezése egy (#) jellel kezdődik. Pl.: #minta. Ezek a táblák addig maradnak életben, amíg a felhasználónak élő kapcsolata van az SQL szerverrel. Amint ez a kapcsolat megszűnik, a tábla törlődik. A globális táblák neve előtt a jelből kettő található, pl.: ##minta. Ezek a táblák elérhetők valamennyi felhasználó számára, és mindaddig életben maradnak, amíg valamennyi felhasználó – akinek kapcsolata van a táblával – meg nem szakította a kapcsolatot az SQL szerverrel.
Ha egy helyi átmeneti tábla egy tárolt eljárásban vagy egy alkalmazásban jön létre, ami egyszerre több felhasználó által is futtatható, akkor az SQL szerver képes különbséget tenni a felhasználók által létrehozott táblák között. Az SQL szerver ezt úgy oldja meg, hogy belül egy numerikus végződéssel látja el mindegyik helyi tábla nevét. Az átmeneti tábla teljes neve a sysobjects táblában tárolódik, és tartalmazza a CREATE TABLE utasítás által megadott nevet és a rendszer által generált végződést. Ahhoz, hogy ezt a végződést az SQL szerver hozzá tudja adni a névhez, az átmeneti tábla neve maximum 116 karakter lehet a standard táblák 128 karakteres nevével szemben.
A lokális átmeneti táblák automatikusan megszűnnek, amikor a feladatkörből kilépünk, hacsak közvetlenül nem töröljük őket:
- Egy helyi átmeneti tábla, amely tárolt eljárásból jött létre, automatikusan megszűnik, amikor az eljárás véget ér. A táblára hivatkozni lehet bármely beágyazott tárolt eljárásból. Külső eljárásból mindez nem lehetséges.
- Minden egyéb átmeneti tábla automatikusan megszűnik az aktuális viszony végén.
Példák
Az alábbiakban néhány példát látunk átmeneti tábla kezelésére:
CREATE TABLE #minta(x INT PRIMARY KEY)
INSERT INTO #minta VALUES (13)
SELECT * FROM ##minta
GO
Ez a példa létrehoz egy átmeneti táblát, beszúr egy sort, majd listázza.
CREATE TABLE ##minta(x INT PRIMARY KEY)
INSERT INTO ##minta VALUES (20)
SELECT * FROM ##minta
GO
Ezt a globális átmeneti tábla példát teszteljük le úgy, hogy a Query Analyzer-ben két különálló kapcsolatot nyitunk. Az egyikben futtatjuk a tábla létrehozását és a beszúrást megvalósító kódrészletet, ezután a másikból megpróbáljuk listázni a tábla tartalmát. Próbáljuk meg ugyanezt lokális átmeneti táblával is. Ha jól végeztük a dolgunkat, akkor az idegen viszony hibaüzenetet jelez.