Rešeno: pronađite kolonu u svim pohranjenim procedurama sql servera

Posljednje ažuriranje: 09/13/2023

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.

Slični postovi: