Čitanje i upisivanje podataka u Excel uz pomoć T-SQL-a

Objavljeno: 30-01-2014 | Autor: Miloš Milenković | Kategorija: T-SQL, Trikovi

Ознаке: ,

2

Ukoliko postoji potreba da se podaci iz nekog Excel dokumenta učitaju u bazu ili da se iz baze izvezu u Excel najčešće se koristi SQL Server Import/Export Wizard (što smo objasnili u prethodnom članku), koji u stvari predstavlja grafički interfejs za kreiranje SSIS paketa kojim se vrši prebacivanje podataka. U slučaju da postoji potreba da se postave neka dodatna podešavanja, najbolje rešenje je otvaranje i editovanje SSIS paketa kreiranog kroz pomenuti Wizard ili kreiranje novog korišćenjem BI Development Studio-a. Međutim, u nekim slučajevima ovaj proces može biti previše komplikovan i zamoran.

Jednostavno rešenje za brzo upisivanje ili iščitavanje podataka iz Excel-a je korišćenje metode OPENROWSET. Osnovna funkcija ove metode je brz i jednostavan pristup linkovanom serveru, a u ovom slučaju je linkovani server ništa drugo do instanca Excela.

Čitanje i upisivanje podataka u Excel uz pomoć SQL Server Import/Export Wizarda

Objavljeno: 26-01-2014 | Autor: Miloš Milenković | Kategorija: Alati, Management Studio

Ознаке: , ,

0

SQL Server Import and Export Wizard je alat koji je deo SQl Server Management Studio-a. Koristi se za prebacivanje podataka iz izvora u destinaciju, pri čemu i izvor i destinacija mogu biti tabela iz neke baze, ali isto tako i neki dokument (Excel, tekstualni dokument, csv…). U nastavku je ukratko opisan najpre izvoz podataka iz baze u Excel, a zatim i uvoz podataka iz Excela u bazu.

Da bi se pokrenuo Wizard potrebno je otvoriti SQL Server Management Studio i u Object Explorer-u se pozicionirati na bazu iz koje se izvoze podaci. Desnim klikom se otvara meni iz koga treba izabrati Tasks/Export Data… Ovim je pokrenut Wizard. Najpre treba izabrati izvor.

Izbor izvora

Pošto je Wizard pokrenut iz baze iz koje izvozimo podatke, trebalo bi da su svi parametri već podešeni kako treba. Klikom na Next prelazimo na izbor destinacije.

Indeksirani view-ovi

Objavljeno: 23-01-2014 | Autor: Milen Blagojević | Kategorija: View-ovi

0

Indeksirani view je u stvari view na kome je kreiran unique clustered index čime mogu značajno da se unaprede performanse upita nad njim. Da bi view mogao da postane indeksirani, mora da ispunjava određena pravila. Neka od bitnijih su (SQL Server 2008/2008 R2):

  • Indeksirani view ne sme referencirati ni jedan drugi view.
  • Indeksirani view mora biti kreiran sa SCHEMABINDING opcijom (što znači da se ne mogu menjati tabele koje ulaze u view)
  • Ukoliko se indeksirani view referencira na funkcije one takođe moraju biti kreirane sa SCHEMABINDING opcijom.
  • Sve funkcije na koje se referencira view moraju biti determinističke.
  • Ukoliko select lista sadrži agregatne izraze, mora biti definisano i GROUP BY.
  • Ako postoji GROUP BY, select mora sadržati COUNT_BIG(*) i ne sme postojati HAVING, CUBE ili ROLLUP.
  • Ne mogu se koristiti: Derived tabele, Rowset funkcije, UNION, ugnježdeni upiti, OUTER ili SELF join-i, TOP, ORDER BY, DISTINCT, COUNT(*) (COUNT_BIG(*) se može koristiti)
  • Ne mogu se koristiti sledeće funkcije: AVG, MAX, MIN, STDEV, STDEVP, VAR, VARP.
  • U SELECT naredbi ne sme postojati * ili tabela.*, imena kolona se moraju eksplicitno navesti
  • Kolona iz tabele se ne može koristi više puta (sem ako nije deo neke kalkulacije)

Za razliku od običnih view-ova koji se uvek izvršavaju u trenutku njihovog korišćenja, indeksirani view-ovi se čuvaju na diskovima i SQL Server ih tretira kao ostale tabele u čemu je i glavna prednost njihovog korišćenja.
Recimo da imamo upit:

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.

SELECT * INTO #temp FROM EXEC dbo.usp_Kefalo_Procedura; --?!?!
EXEC INTO #temp dbo.usp_Kefalo_Procedura; --?!?!

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

CREATE TABLE #tempTabela (Kolona INT);

INSERT INTO #tempTabela
EXEC dbo.usp_Kefalo_Procedura;

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

Uvođenje paralelizma u SSIS paket – Balanced Data Distributor

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.

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.

Slanje izveštaja na mail – SSRS Subscription

Objavljeno: 11-01-2014 | Autor: Miloš Milenković | Kategorija: SSRS

Ознаке: ,

0

Izveštaji kreirani u Reporting Servisima (SSRS) se mogu pogledati on-line na Report Serveru, a takođe mogu biti poslati primaocima kao prilog e-mail poruke. Korisnik ili grupa korisnika se može „pretplatiti“ na neki izveštaj tako što se za njih kreira Subscription. Postoje dva tipa subscriptiona: standardni i data-driven. Standardni ćemo opisati u ovom članku, a data-driven u nekom od narednih.

Pre kreiranja subscriptiona neophodno je da budu ispunjeni sledeći preduslovi:

  • Korisnik koji kreira subscription mora imati Browser prava na izveštaju.
  • Data source izveštaja mora biti podešen tako da koristi „stored credentials“ ili „no credentials“. Ukoliko je podešen na „impersonated credentials“ nije moguće kreirati subscription.
  • Email SMTP server u Reporting Services Configuration Manager-u mora biti podešen.
  • SQL Server Agent mora biti startovan.

Izveštaji se mogu isporučiti na dva načina:

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:

Interni tipovi join-ovanja

Objavljeno: 05-01-2014 | Autor: Milen Blagojević | Kategorija: Optimizacija

0

Prilikom logičkih join-ovanja tabela u SQL serveru, SQL Server Query Optimizer koristi jedan od 3 tipa internih join-ova:

Merge join

U većini slučajeva ovo je najefikasniji metod join-ovanja tabela. SQL Server koristi ovaj tip kada se join-uju tabele sa približnim brojem redova po kolonama koje imaju isto sortirane indekse.

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.