Problema principală este că folosirea prefixului sp_ în alte baze de date decât cele de bază conduce la următoarea problemă. Dacă optimizatorul întâlnește o procedură stocată cu prefixul sp_ de la primele verificări pentru a vedea dacă există un astfel de sistem și dacă îl găsește, acesta ignoră pe dvs., dar ia un sistem. Aceasta duce la două probleme:
- Verificarea excesului necesită costuri suplimentare
- Există o probabilitate destul de mare ca planul dvs. pentru o astfel de procedură stocată să nu fie stocat în cache.
Să analizăm în detaliu:
Tipuri de obiecte de sistem
Obiectele de sistem vin cu o instalare SQL Server, sunt situate în bazele de date ale sistemului, dar pot fi accesate din orice bază de date. În versiunile curente, toate obiectele de sistem sunt marcate ca furnizate de Microsoft, dar în versiunile viitoare totul se poate schimba.
Există doar 4:
Metoda de recunoaștere
Deci, de ce este nevoie de o metodă specială de recunoaștere.
Principalul motiv este că obiectele de sistem trebuie să fie vizibile din baza de date a utilizatorilor, dar acestea sunt stocate fizic în baza de date sistem și nu sunt copiate în baza de date a utilizatorilor atunci când sunt create. O abordare destul de logică, pentru că în caz contrar, nu este posibil să se controleze aceste obiecte foarte sistemice. Adică, nu le puteți proteja de utilizator și există și probleme cu actualizarea serverului de baze de date, care uneori afectează obiectele de sistem.
De asemenea, merită menționat faptul că numele complet al obiectului bazei de date este alcătuit din 4 părți:
Dar fiecare regulă are excepții, deoarece nu este bine să forțați un utilizator să scrie master.dbo.sp_who, și nu doar sp_who.
Următoarele reguli sunt folosite pentru a recunoaște obiectele sistemului.
Anydb.dbo.sp_ * este recunoscut ca master.dbo.sp_, dar este executat în contextul anydb.
Aceasta este, dacă executăm următorul cod:
Mesajul 195, nivelul 15, starea 10, linia 1
"My_fn" nu este un nume de funcție încorporat.Vizualizările de sistem din INFO_SCHEMA sau sys trebuie să fie apelate cu schemele specificate.
Ele sunt situate în baza de date master, dar compilația rulează în fiecare bază de date specifică.Conectați-vă cu:
Nu există evenimente viitoare în perioada de timp specificată.