Riješeno: pretražite tekst u svim pohranjenim procedurama sql servera

Posljednje ažuriranje: 09/13/2023

Razumijevajući zahtjeve pohranjenih procedura SQL Servera, često se nalazimo u potrebi da tražimo određeni tekst u svim njima. Bilo da se radi o otklanjanju grešaka, identificiranju ovisnosti ili samo provjeri upotrebe određene tablice, stupca ili bilo kojeg drugog SQL elementa. Ovaj zadatak, međutim, može biti prilično zamoran ako se izvodi ručno. U ovom članku ćemo razgovarati o tome kako to učiniti na efikasniji način, skriptiranjem našeg izlaza.

Pojednostavljivanje zadataka sa SQL skriptama

Koristeći snagu SQL skripti možemo ovaj naporan zadatak pretvoriti u brz i jednostavan proces. Umjesto da pojedinačno ispitujemo svaku pohranjenu proceduru, možemo direktno upitati sistemske poglede baze podataka da bismo tražili određeni niz unutar njih. Ovo rješenje je nevjerovatno svestrano jer je kompatibilno s većinom verzija SQL Servera.

Princip ove procedure je vrlo jednostavan – sve se radi o preuzimanju podataka iz pogleda sql_modules jednostavnom naredbom za odabir. Sistemski pogled sys.sql_modules sadrži red za svaki objekt koji ima pridruženi SQL modul. SQL moduli su u osnovi bilo koje rutine ili objekti koji su kreirani iz izraza SQL Server Data Manipulation Language (DML) (npr. pohranjene procedure, pogledi, funkcije).

SQL skripta za izvođenje ove operacije bi bila:

SELECT OBJECT_NAME(sm.object_id) AS object_name, 
       OBJECT_DEFINITION(sm.object_id) AS definition
FROM sys.sql_modules AS sm
WHERE sm.definition LIKE '%your_text%'

Zaroniti u SQL kod

U datom SQL kodu, trebate zamijeniti 'your_text' stringom koji tražite. Upit će vratiti listu naziva objekata (pohranjena procedura, funkcija, pogled, itd.) i njihove odgovarajuće definicije koje uključuju navedeni tekst za pretraživanje. Na ovaj način možete lako identificirati sve instance određenog teksta koji tražite.

Razumijevanje kodeksa:

  • OBJECT_NAME(sm.object_id) je ime objekta koji sadrži navedeni tekst.
  • OBJECT_DEFINITION(sm.object_id) je definicija objekta, tj. SQL skripta objekta.

Uvjerite se da ako je tekst koji tražite dio SQL ključne riječi, ovaj upit će također vratiti objekte u kojima se ova ključna riječ koristi. Stoga je preporučljivo tražiti prepoznatljive ključne riječi.

Dodatne napomene

Iako ovo rješenje značajno ubrzava proces, treba imati na umu neka razmatranja. Stupac definicije u sys.sql_modules ima maksimalnu veličinu od 4000 znakova. Ako imate pohranjenu proceduru dužu od toga, tekst će biti skraćen. Ovo bi potencijalno moglo uzrokovati gubitak nekih pojavljivanja teksta pretraživanja. Rješenje se, međutim, kontrolira postavljanjem opcije 'TEXTSIZE' na maksimalnu vrijednost od 2147483647.

Ovo možda nije najkonvencionalnija upotreba SQL skriptiranja, ali sasvim sigurno dokazuje svestranost i pojednostavljenje koje donosi svakodnevnim zadacima stručnjaka za baze podataka. To je izvrstan primjer kako se razumijevanje i efikasno korištenje alata pri ruci može značajno poboljšati SEO i produktivnost.

Slični postovi: