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:

Pretrage bez komentara

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.