Hogyan ellenőrizhető az ideiglenes tábla létezése
Samorodov Fedor Anatolyevich. Hogyan ellenőrizhető az ideiglenes tábla létezése

Az SQL Server ideiglenes táblákkal dolgozhat. Az ilyen táblák nevei egy vagy két rácskal kezdődnek (#). Nyilvánvalóan ideiglenes táblákat találtak, hogy ideiglenesen tárolhassák az adatokat. Például bármely számítás közbenső eredményeinek tárolására. Vagy bizonyos adatok átvitele egyik folyamatról a másikra.
Néha meg kell vizsgálni, hogy egy bizonyos ideiglenes táblát már létrehoztak-e vagy sem. Hogyan kell csinálni?
Ha globális ideiglenes tábla van, akkor a hagyományos módon ellenőrizhető - a táblázatok listájával. Csak ne felejts el korrigálni azt a tényt, hogy az összes ideiglenes táblázatot - mind a globális, mind a helyi - nem a jelenlegi felhasználói adatbázisban, hanem a TempDB rendszer adatbázisában hozták létre.
Nézd meg a példát. Az egyik folyamat globális átmeneti táblát hozott létre. Most ez és minden más folyamat egy szokásos táblára utalhat. Különösen a rendszerkatalógusok sys.Tables és Information_Schema.Tables-ban láthatók.

Jó. Az ilyen ellenőrző mechanizmus azonban nem működik, ha helyi ideiglenes tábla. Végül is ezek a táblázatok minden egyes munkamenethez külön-külön kerülnek létrehozásra, és különböző munkamenetekben lehetnek táblázatok azonos névvel. Hogy nem volt névkonfliktus, a szerver átnevezi a helyi táblákat, és létrehozza őket a TempDB-ben.
Tehát két idõszakban létrehozom a helyi ideiglenes táblákat ugyanazon nevekkel. Minden munkamenetben a kiszolgáló megkülönbözteti tábláját másoktól, de a rendszerkönyvtárakban egyszerre láthatók:

Ha közelebbről megnézed, láthatod, hogy a szerver egy egyedi véget ad hozzá az asztalneveknek, amelyek alapján meghatározza, hogy melyik táblázatban van:

Nem lenne kívánatos az SQL-kóddal ezekkel a végekkel foglalkozni. Szintén nem szükséges. Mert az Object_ID függvény. amely automatikusan kiválasztja a kívánt táblázatot:

Ha egy adott névvel rendelkező objektum létezik, akkor az Object_ID függvény visszaadja annak azonosítóját, és ha nem, NULL. Így kényelmesen és megbízhatóan ellenőrizhetjük egy ilyen szokatlan tárgy jelenlétét, mint egy helyi ideiglenes tábla:

Ez a funkció rendelkezik egy opcionális második paraméterrel, amelyet egy adott típusú objektum meghatározásához használhat. "U" azt jelenti, hogy asztalt keresünk.