Smeštanje rezultata procedure u temp tabelu

Objavljeno: 20-01-2014 | Autor: Nenad Živković | Kategorija: Stored procedure, T-SQL, Trikovi

Ознаке:,

0

Sintaksa koju svi često volimo da koristimo je SELECT * INTO #temp FROM.. koja nam omogućava da brzo kreiramo temp tabelu od rezultata koji upit vraća.

Verovatno je i svako ponekad poželeo da to isto iskoristi i da rezultate stored procedure na sličan način smesti u neku privremenu tabelu, ali već prvi pokušaj će pokazati da takva sintaksa za procedure ne postoji.

Jedino ispravno rešenje je unapred kreiranje temp tabele, i njeno punjenje INSERT..EXEC sintaksom:

Međutim, ukoliko postoje određeni uslovi, moguće je iskoristiti funkciju OPENROWSET i postići željeni cilj. Komanda bi izgledala ovako:

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:

Problem u slučaju UNPIVOT-a kolona tipa string

Objavljeno: 02-01-2014 | Autor: Tatjana Mađer | Kategorija: T-SQL

0

UNPIVOT operator u T-SQL-u se pojavljuje od verzije SQL Server-a 2005 pa nadalje. To je operator koji omogućava normalizaciju podataka tj. transformaciju naziva kolona u vrednosti jedne kolone i podataka u skladu sa tim.  Prilikom korišćenja ovog operatora, neophodno je da sve kolone koje se nalaze u UNPIVOT listi budu istog tipa. Postoji još jedno ograničenje koje se tiče podataka tipa string: neophodno je da sve kolone osim istog tipa i iste dužine, imaju i istu kolaciju. Ukoliko to nije ispunjeno, SQL server vraća grešku
The type of column „YYY“ conflicts with the type of other columns specified in the UNPIVOT list.
koja ne upućuje na konkretan problem i na osnovu koje, ukoliko nemate informaciju o različitosti kolacije medju kolonama, nije lako niti brzo doći do rešenja problema.
U nastavku će na primeru biti objašnjen problem i potencijalna rešenja.

Procedura sa ulaznim parametrom radi sporije – parameter sniffing

Objavljeno: 30-12-2013 | Autor: Žana (Jovana) Baćović | Kategorija: Optimizacija, Stored procedure, T-SQL

0

Procedure sa ulaznim parametrima se koriste da bi se poboljšale performanse sistema, kada postoji mnogo zajedničkih upita istog oblika. Prilikom prvog izvršavanja procedure (pod prvim se podrazumijeva izvršavanje nakon (re)kompajliranja), SQL Server kreira keširani plan izvršenja (execution plan), koji koristi prilikom sledećeg poziva. Ovakvo ponašanje (koje predstavlja ponašanje SQL Servera po dizajnu) je poznato pod nazivom parameter sniffing.
Kreirani plan je prilagođen prvoj prosleđenoj vrijednosti parametra i u zavisnosti od njene raspoređenosti na izvoru, može biti izabran tako da koristi npr. nonclustered index seek. Takav plan može da odgovara ostalim vrijednostima parametra, ali može da se desi da nekoj vrijednosti parametra više odgovara korišćenje clustered index scan, a ipak će koristiti keširani plan.
Tada procedura traje mnogo duže nego što je uobičajeno, dešava se da se izvršavanje poveća sa minut ili dva na preko sat vremena. Kada pokušate da zaključite koji upit u proceduri je iznenada počeo da pravi problem, zaključićete da se tijelo procedure, sa proslijeđenom vrijednošću parametra pušteno kao upit izvršava za isto vrijeme kao procedura ranije i da problem nije u tijelu procedure.
Problem je opisano ponašanje SQL Servera, odnosno

Izračunavanje udaljenosti između dve tačke

Objavljeno: 27-12-2013 | Autor: Miloš Milenković | Kategorija: T-SQL

2

Ukoliko imamo koordinate dve tačke na mapi, veoma lako možemo izračunati udaljenost između njih uz pomoć GEOGRAPHY tipa podatka i funkcija Point i STDistance. Za primer uzećemo Trg Republike u Beogradu kao start i Adu Ciganliju kao cilj.

Zatim od parova koordinata formiramo dve tačke tipa GEOGRAPHY koristeći funkciju