Samorodov Fedor Anatolievici. Cum să verificați existența unei mese temporare
SQL Server poate lucra cu tabele temporare. Numele acestor tabele încep cu una sau două grile (#). Tabelele temporare, evident, au fost inventate pentru stocarea temporară a datelor în ele. De exemplu, pentru a stoca rezultatele intermediare ale oricăror calcule. Sau pentru a transfera unele date de la un proces la altul.
Uneori este necesar să verificați dacă o anumită tabelă temporară a fost deja creată sau nu. Cum se face corect?
Dacă este o tabelă globală temporară, atunci poate fi verificată în mod tradițional - prin vizualizarea listei de tabele. Doar nu uitați să faceți o corecție pentru faptul că toate tabelele temporare - atât globale, cât și locale - nu sunt create în baza de date curentă a utilizatorilor, ci în baza de date a sistemului TempDB.
Uită-te la exemplu. Un proces a creat un tabel temporar global. Acum, acest proces și toate celelalte procese se pot referi la el ca la o masă obișnuită. În special, aceștia o vor vedea în cataloagele de sistem sys.Tables și Information_Schema.Tables.
E bine. Cu toate acestea, un astfel de mecanism de verificare nu funcționează dacă este o tabelă temporară locală. La urma urmei, aceste tabele sunt create individual pentru fiecare sesiune, iar în diferite sesiuni pot fi tabele cu aceleași nume. Că nu a existat niciun conflict de nume, serverul redenumește tabelele locale, creându-le în TempDB.
Deci, am creat tabele temporare locale cu aceleași nume în două sesiuni. În fiecare sesiune serverul distinge tabelul de ceilalți, dar în directoarele de sistem acestea sunt vizibile simultan:
Dacă vă uitați atent, puteți vedea că serverul adaugă un sfârșit unic la numele tabelului, conform căruia determină tabelul în care acesta este:
Nu ar fi de dorit să ne deranjeze aceste terminații în codul SQL. De asemenea, nu este necesar. Pentru că avem funcția Object_ID. care selectează automat tabelul solicitat:
Dacă există un obiect cu un nume dat, atunci funcția Object_ID își returnează identificatorul și, dacă nu, NULL. Astfel, putem verifica în mod convenabil și fiabil prezența unui obiect neobișnuit ca și o masă temporară locală:
Această funcție are un al doilea parametru opțional, pe care îl puteți utiliza pentru a specifica un anumit tip de obiect. "U" înseamnă că căutăm o masă.