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.

Funkcije za splitovanje stringova

Objavljeno: 27-11-2014 | Autor: Nenad Živković | Kategorija: Funkcije, T-SQL

Ознаке: , , , ,

0

Pre nekog vremena smo u dva članka (1, 2) opisali proces konkatenacije, odnosno spajanja vrednosti iz kolone u jedan string. Ovog puta prikazaćemo obrnut proces – kako iz jednog csv stringa dobiti sve pojedinačne vrednosti. Kako je ovaj proces malo složeniji i za pojedinačni string treba da vrati tabelu, obično se u te svrhe koriste table-valued funkcije, tzv. splitting funkcije.

Odmah da napomenemo da je najispravnija varijanta za splitting funkciju korišćenje CLR. Međutim, to ćemo ostaviti za neki naredni članak, a u ovom ćemo opisati nekoliko T-SQL rešenja. Njih postoji dosta, a mi smo izabrali pet koje smo prilagodili i adaptirali tako da sve funkcije imaju iste ulazne parametre i vraćaju iste rezultate:

  • Prvi ulazni parametar je string koji se splituje, u NVARCHAR(MAX) formatu
  • Drugi ulazni parametar je delimiter, koji i sam može imati do 255 znakova
  • Ukoliko delimiter nije prosleđen koristi se zarez (,)
  • Rezultat funkcije je tabela sa dve kolone: RedniBroj i Element
  • Povratni elementi su tipa NVARCHAR(4000)
  • Blanko znakovi na početku svakog elementa se uklanjaju

While petlja

Prvo rešenje koje ćemo opisati je ujedno i ono koje se najčešće koristi. Odseca se prvi element, a zatim u while petlji ponavlja proces nad ostatkom stringa.

Provera JMBG

Objavljeno: 29-09-2014 | Autor: Nenad Živković | Kategorija: Funkcije

0

Jedinstveni matični broj građana ili skraćeno JMBG uveden je sedamdesetih godina prošlog veka u tadašnjoj Jugoslaviji i, kako mu i ime kaže, predstavlja jedinstveni identifikacioni broj koji je dodeljivan svakom građaninu. Osim u Hrvatskoj, gde je u procesu zamene, JMBG je, i danas, u upotrebi u svim novonastalim državama od bivših republika SFRJ. Kao takav, JMBG se danas nalazi u gotovo svakoj bazi koja čuva podatke o fizičkim licima, makar kao opisno polje, a zbog svoje jedinstvenosti često je i primarni ključ takvih tabela.

Sam JMBG sastoji se od 13 cifara koje sa sobom nose određene informacije, kao što su datum i mesto rođenja ili pol osobe. Više detalja o samom JMBG-u možete pročitati na Wikipedia članku, a mi smo vam pripremili par SQL skriptova pomoću kojih možete izvući te podatke i proveriti validnost samog broja.

String funkcije (2. deo)

Objavljeno: 29-07-2014 | Autor: Miloš Milenković | Kategorija: Funkcije, T-SQL

Ознаке:

1

U jednom od prethodnih članaka (String funkcije (1. deo)) smo opisali neke od najčešće korišćenih funkcija za rukovanje stringovima. Ovaj članak donosi opis nekih manje poznatih funkcija.

SPACE funkcija kao rezultat vraća onoliko praznih mesta koliko prosledimo kao parametar. Sintaksa je SPACE(broj) gde parametar broj predstavlja praznih mesta.
Na osnovu opisanog ponašanja funkcije možemo zaključiti da je rezultat sledećeg upita:

SELECT 'SQL' + SPACE(5) + 'KEFALO';

niz karaktera SQL KEFALO.

CONCAT funkciju koristimo za povezivanje 2 ili više niza karaktera u jedan niz (string). To postižemo sintaksom: CONCAT(string1, string2, string3 … stringN), gde svaki od parametara predstavlja niz karaktera. Neophodno je proslediti najmanje 2 parametra, u suprotnom će se javiti greška. Pre povezivanja parametara, vrši se njihova implicitna konverzija u string. NULL vrednosti se implicitno konvertuju u prazan string. Tip podatka rezultata zavisi od parametara koje smo prosledili. Ukoliko je bar jedan od parametara UNICODE tipa (nchar/nvarchar) rezultat će biti UNICODE. U suprotnom će rezultat biti char/varchar. Što se tiče dužine, i ona zavisi od ulaznih parametara. Ako bar jedan od stringova na ulazu ima dužinu MAX (npr. varchar(max)) i rezultat će imati dužinu MAX. U ostalim slučajevima dužina rezultata je jednaka zbiru dužina pojedinačnih stringova.
Ukoliko izvršimo upit:

Agregirani bitovi

Objavljeno: 19-06-2014 | Autor: Nenad Živković | Kategorija: Funkcije, T-SQL, Trikovi

Ознаке: , , ,

0

Ukoliko dobijete ideju da proverite da li u nekoj BIT koloni postoji makar jedna vrednost true ili makar jedna vrednost false, možda će vam prvo pasti na pamet ideja da iskoristite agregatne funkcije MAX() ili MIN() i lako proverite da li su sve vrednosti iste, s obzirom da postoje samo dve moguće vrednosti.

Međutim, ako pokušate da izvršite komandu:

SELECT MAX(UBoji) FROM dbo.CrtaneEpizode;

ubrzo ćete udariti u zid pošto se javlja sledeća greška:

Msg 8117, Level 16, State 1, Line 1
Operand data type bit is invalid for max operator.

String funkcije (1. deo)

Objavljeno: 27-05-2014 | Autor: Miloš Milenković | Kategorija: Funkcije, T-SQL

Ознаке:

2

SQL Server nudi veliki broj ugrađenih funkcija za rukovanje stringovima. Neke od njih su dobro poznate i često korišćene, dok su neke manje poznate ili su uvedene u novijim verzijama SQL servera. Predstavićemo sve string funkcije kroz nekoliko članaka. U prvom vas podsećamo na one najpoznatije i najkorišćenije.

SUBSTRING je funkcija koja kao rezultat vraća deo stringa koji prosledimo kao prvi parametar. Sintaksa je SUBSTRING(string, početak, dužina) gde prvi parametar string predstavlja bilo koji niz karaktera tipa char/varchar/text, nchar/nvarchar/ntext ili binary/varbinary/image. Tip podatka u kome ćemo dobiti rezultat zavisi od tipa ovog ulaznog parametra. Ukoliko ulazni parametar ima jedan od tipova iz prve grupe (char/varchar/text), rezultat je tipa varchar. Ako kao ulazni parametar prosledimo string tipa nchar/nvarchar/ntext, rezultat ćemo dobiti kao nvarchar, dok za binary/varbinary/image dobijamo varbinary. Drugi parametar označava poziciju u prvom parametru od koje počinje odsecanje karaktera, a treći parametar predstavlja dužinu željenog dela stringa koji smo prosledili kao prvi parametar.

Izračunavanje dužine stringa korišćenjem funkcija LEN() i DATALENGTH()

Objavljeno: 14-01-2014 | Autor: Žana (Jovana) Baćović | Kategorija: Funkcije, T-SQL

0

SQL funkcije LEN() i DATALENGTH() služe za izračunavanje dužine stringa.
Potrebno je biti oprezan prilikom njihovog korišćenja, imati u vidu da se različito ponašaju sa različitim tipovima podataka, kao i da različito tretiraju blanko znakove na kraju stringa.

Funkcija LEN()

Za izračuvanje dužine stringa, SQL Server koristi nekoliko ugrađenih funkcija. Funkcija koja se najčešće koristi je LEN().

Primjer: Definišimo promjenljivu tipa nvarchar i izračunajmo njenu dužinu.

Računanje poslednjeg dana u mesecu – EOMONTH funkcija

Objavljeno: 08-01-2014 | Autor: Nenad Živković | Kategorija: Funkcije, T-SQL

0

Iako je već prošlo neko vreme od kako je SQL Server 2012 stigao na tržište, verujem da se u većini radnih okruženja ili još uvek ne koristi ili se ne koriste sve njegove funkcionalnosti. Pored svih krupnijih i značajnijih novina koje je verzija 2012 donela i koje su opisivane na prezentacijama i u blogovima, često promaknu neke od manjih, a jedna od njih je uvođenje novih datetime funkcija. Među njima, kao veoma korisna, posebno se izdvaja funkcija EOMONTH() koja za zadati datum vraća poslednji dan u mesecu.

Pronalaženje poslednjeg dana u mesecu je nešto sa čime se DB developeri često sreću, a do sada smo morali da se snalazimo na razne načine. Da svi meseci imaju 30 dana bio bi manji problem, ali različiti broj dana u mesecu, kao i prestupne godine zahtevaju malo složeniju kombinatoriku. Evo dva primera: