Kada radite s velikim bazama podataka u SQL Serveru, neizbježno možete naići na situaciju u kojoj trebate pronaći određeni stupac u svim pohranjenim procedurama. Ovo bi moglo da se pojavi ako refaktorišete svoj kod, lovite greške ili ste jednostavno znatiželjni o upotrebi kolone u svojim procedurama. Bez obzira na razlog, lociranje stupca u SQL Serveru može izgledati kao zastrašujući zadatak, ali ne brinite – uz pravu SQL skriptu, ovo se može učiniti brzo i lako.
To možemo postići korištenjem tablice `INFORMATION_SCHEMA.ROUTINES` ili `sys.sql_modules`, gdje je tekst svake procedure pohranjen u SQL serveru.
[b] Pogledajmo praktičan pogled na to kako pronaći kolonu u svim pohranjenim procedurama u SQL Serveru. [/b]
Pregled rešenja
Naša osnovna strategija će biti upiti tablicu `INFORMATION_SCHEMA.ROUTINES` (ili `sys.sql_modules`) kako bismo dohvatili definiciju svake pohranjene procedure. Zatim možemo koristiti izraz `LIKE` za traženje našeg stupca unutar ovih definicija. To je tako jednostavno!
Ako to želite postići u svom SQL Server okruženju, možete koristiti ovaj generički upit:
SELECT
ROUTINE_NAME, ROUTINE_DEFINITION
FROM
INFORMATION_SCHEMA.ROUTINES
WHERE
ROUTINE_DEFINITION LIKE '%ColumnName%'
AND ROUTINE_TYPE='PROCEDURE'
Objašnjenje koda korak po korak
1. Odabir potrebnih informacija
Počinjemo odabirom `ROUTINE_NAME` i `ROUTINE_DEFINITION` iz `INFORMATION_SCHEMA.ROUTINES`.
2. Filtriranje definicije
Zatim koristimo klauzulu `WHERE` da filtriramo `ROUTINE_DEFINITION`. Zanimaju nas samo oni redovi u kojima `ROUTINE_DEFINITION` sadrži ime našeg stupca.
3. Ograničenje na pohranjene procedure
Konačno, dodajemo još jedan uvjet u klauzulu `WHERE` da ograničimo naš skup rezultata samo na one rutine koje su pohranjene procedure.
Alternativni pristup koristeći sys.sql_modules
Gornji upit će raditi savršeno za pronalaženje imena kolone u pohranjenoj proceduri. Međutim, postoji alternativni način da dobijete iste informacije. Možemo koristiti sistemski prikaz `sys.sql_modules` da dobijemo tekst modula SQL Servera. Uključuje definicije pohranjenih procedura, funkcija, okidača, itd.
SELECT Object_name(sm.object_id) as name, sm.definition FROM sys.sql_modules AS sm JOIN sys.objects AS o ON sm.object_id = o.object_id WHERE sm.definition like '%ColumnName%' AND type_desc = 'SQL_STORED_PROCEDURE'
Korištenje SQL zamjenskih znakova
SQL zamjenski znakovi mogu biti vrlo korisni ovdje. Ako niste sigurni da li razmaci ili drugi znakovi mogu prethoditi ili slijediti ime vašeg stupca, možete koristiti džoker znak `%` kao npr. `'% ColumnName %'` da obuhvatite sve znakove koji mogu biti prisutni.
Sa ovim jednostavnim koracima, sada možete lako pronaći kolonu kroz sve svoje pohranjene procedure na SQL serveru. Korisnost takve funkcije nije ograničena na pronalaženje kolona, već se proteže na bilo koji tekst koji želite da uočite u svojim pohranjenim procedurama.
