Objavljeno: 18-02-2014 | Autor: Tatjana Mađer | Kategorija: T-SQL
2
Vrlo često se programeri susreću sa zahtevom da prikažu u aplikaciji izveštaj koji sadrži sumarne rezultate gde je potrebno prikazati u posebnoj koloni svakog sumarnog reda sve članove koji učestvuju u agregatnom redu.
U prethodnom delu ovog članka, objašnjeni su načini konkatenacije string vrednosti ukoliko je unapred poznat i ograničen broj redova i stringova koje treba spojiti.
Nepoznat broj redova
Slučajevi sa kojima se developeri najčešće susreću su oni kada je broj redova nepoznat. U ovim slučajevima je kod komplikovaniji i zahteva napredno poznavanje transakcionog SQL jezika. Varijanti za rešenje ovog problema ima više i najinteresantnije će biti objašnjene u nastavku.
a) Korišćenje rekurzije uz pomoć CTE analogno generisanju hijerarhije. CASE u rekurzivnom delu upita je stavljen da bi se izbegao zarez na prvom mestu rezultata konkatenacije, što se može postići i na drugi način. Glavni nedostatak ove metode je to što brzina izvršavanja ovog upita postaje nezadovoljavajuća sa porastom broja nivoa. Treba obratiti pažnju i na sledeće: s obzirom na to da je podrazumevani limit za broj nivoa u rekurziji 100, preporuka je koristiti hint MAXRECURSION koji omogućava definisanje maksimalnog broja nivoa u rekurziji, gde je omogućeno definisati i beskonačan broj redova (Maxrecursion 0) što je i urađeno u narednom primeru.
Objavljeno: 11-02-2014 | Autor: Tatjana Mađer | Kategorija: T-SQL
3
Vrlo često se programeri susreću sa zahtevom da prikažu u aplikaciji izveštaj koji sadrži sumarne rezultate gde je potrebno prikazati u posebnoj koloni svakog sumarnog reda sve članove koji učestvuju u agregatnom redu.
Konkretan primer u bazi SQL_KEFALO ukoliko imamo tabelu sa crtanim filmovima i tabelu sa epizodama za svaki crtani film,
select E.*, F.Naziv as NazivCrtaca
from dbo.CrtaneEpizode E
inner join dbo.CrtaniFilmovi F
on E.CrtacID=F.CrtacID
zahtev bi bio sledeći:
Objavljeno: 17-01-2014 | Autor: Tatjana Mađer | Kategorija: Optimizacija, SSIS
0
Balanced Data Distributor (BDD) je SSIS komponenta koja omogućava jednostavan način da se iskoriste multi-procesorski serveri uvođenjem paralelizma u data flow paketa.
BDD se prvi put pojavljuje sa verzijom SQL Servera 2008. Ne dolazi podrazumevano sa instalacijom SQL Servera, već je neophodno instalirati ga posebno (instalacija se može preuzeti sa sledećeg link-a). Nakon instaliranja, potrebno ga je ručno dodati da bi se pojavio u listi data flow transformacija i to na sledeći način: u Toolbox-u uraditi desni klik na Data Flow Transformations i izabrati Choose Items->SSIS Data Flow Items tab gde je potrebno čekirati Balanced Data Distributor i potvrditi sa OK.
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.