Pretraga procedura, viewova i funkcija bez komentara
Objavljeno: 29-12-2014 | Autor: Nenad Živković | Kategorija: Funkcije, Stored procedure, T-SQL, View-ovi
0
Bliži se kraj godine i jedno pitanje sa kojim se kao developer možda sretnete u to vreme, a pogotovu ako radite sa bazama koje niste samo vi održavali, je „Da li je negde u nekoj proceduri ostala zakucana godina?“
Alata i programa za pretragu procedura, viewova i funkcija ima dosta na tržištu, uglavnom svi funkcionišu dobro, a mnogi su čak i besplatni. Međutim, problem koji se javlja kod svih tih programa je, što u rezultate pretrage uvek ulaze i komentari unutar procedura, odnosno vraćaju među rezultate i procedure gde se termin koji tražite nalazi unutar komentara. To najčešće nije problem, ali kada se traži godina ili datum može biti. Ukoliko redovno vodite u zaglavlju procedura evidenciju izmena, ili imate primere poziva koji u sebi uključuju datum, verovatno da ćete za pretragu termina „2014“ dobiti sve procedure koje ste menjali u toku 2014. godine.
Naravno, postoji i opcija da sami pretražujete sistemske viewove, ali problem ostaje isti.
Da bismo prevazišli problem, mi smo vam pripremili jedan upit – proceduru koja radi pretragu, ali pre toga uklanja sve komentare i pretražuje samo kod. Možete je preuzeti sa sledećeg linka: Procedura uspKefalo_PretragaBezKomentara
Sama procedura je dovoljno komplikovana da nećemo ovde ulaziti u detalje i opisivati kako radi, ali ono što je bitno je da vam je za njeno pokretanje potrebna splitting funkcija. Korišćena je dbo.udfKefalo_Splitter_While opisana u prethodnom članku, a koju takođe možete preuzeti iz naše sekcije Korisni Skriptovi.
Poziv procedure je jednostavan. Postoje dva ulazna parametra – prvi @PojamZaPretragu je obavezan, to je pojam koji se pretražuje. Drugi parametar @Baza je opcion – označava bazu nad kojom će se raditi pretraga, a ukoliko se ne prosledi, pretraga se vrši nad aktuelnom bazom. Rezultat procedure su naziv, ID i tip objekta u kome je pojam pronađen, kao i redni broj i ceo red u kome se nalazi. To bi trebalo da bude dovoljno da pronađete sporni termin i promenite ga u, nadam se, nešto što nećete morati da menjate sledeće godine u isto vreme.
Za testni primer, kreiraćemo dve jednostavne procedure. Jednu koja u sebi ima termin 2014 samo u komentarima, a drugu koja ima i u nazivu procedure i u WHERE uslovu.
CREATE PROCEDURE [dbo].[uspKefalo_TestBezGodine] AS --Datum izmene: 28-12-2014 SELECT * FROM Tabela WHERE Godina = /*2014*/ YEAR(GETDATE()); GO CREATE PROCEDURE [dbo].[uspKefalo_Test2014] AS --Datum izmene: 28-12-2014 SELECT * FROM Tabela WHERE Godina = 2014; GO
Izršavanje procedure uspKefalo_PretragaBezKomentara, vratiće dva rezultata pojavljivanja termina 2014 u drugoj proceduri:
U svim ovim primerima, pretraživali smo godinu 2014, ali naravno možete koristiti proceduru za pretragu bilo kog termina koji vam zatreba. Takođe, imajte u vidu, da zbog prirode problema i načina rada procedure, u zavisnosti od količine objekata u vašoj bazi sama pretraga može da potraje.