CONTEXT_INFO

Objavljeno: 14-03-2014 | Autor: Milen Blagojević | Kategorija: T-SQL, Trikovi

0

Context informacija je binarna vrednost veličine do 128 bajtova koja se može postaviti na nivou sesije i koristiti u procedurama, trigerima ili funkcijama koje se izvršavaju u okviru iste sesije.

Postoje dve komande koje se koriste za postavljanje i čitanje ove informacije:

  • SET CONTEXT_INFO – za upisivanje vrednosti
  • CONTEXT_INFO () – za čitanje vrednosti

Ova vrednost se takođe može pročitati i u sledećim DMVs:

  • sys.dm_exec_requests
  • sys.dm_exec_sessions
  • sys.sysprocesses

Primer:

Ažuriranje (update) view – a

Objavljeno: 10-03-2014 | Autor: Žana (Jovana) Baćović | Kategorija: T-SQL, View-ovi

Ознаке:

0

View može da služi samo za čitanje podataka (read only view) ili da bude promjenljiv, odnosno da nad njim mogu da se pišu dml (Data Manipulation Language) naredbe update, insert i delete.

Read only view

Postoji više načina da view bude read only, navešću samo jedan pošto nisu tema ovog članka.
Read only svojstvo view-a može da se postigne i tako što se na kraju upita koji ga kreira doda union all sa uslovom koji neće biti zadovoljen.
Primjer: Nad Kefalo bazom izvršiti sledeći upit:

CREATE VIEW dbo.NadimciAutoraReadOnly (AutorID, Nadimak)
AS
SELECT AutorID, Nadimak
FROM dbo.Autori
UNION ALL
SELECT 0,''
WHERE 1=0

Ukoliko pokušate da izvršite update:

UPDATE dbo.NadimciAutoraReadOnly
SET Nadimak = 'Peyo nadimak'
WHERE AutorID = 1001;

SQL Server će prijaviti grešku da view ima izvedeno ili konstantno polje i neće izmijeniti podatke.

Rekurzivni CTE za kreiranje datuma

Objavljeno: 05-03-2014 | Autor: Nenad Živković | Kategorija: T-SQL, Trikovi

Ознаке: , ,

0

Ukoliko vam je potrebno da izvučete sve datume u nekom periodu, to možete učiniti uz pomoć rekurzivnog CTE kome zadate početni i krajnji datum. U baznom delu se selektuje početni datum, a u rekurzivnom dodaje po jedan dan dok ne stigne do krajnjeg. Primer je u sledećem upitu:

DECLARE @pocetni DATE;
DECLARE @krajnji DATE;

SET @pocetni = '20131226';
SET @krajnji = '20140304';

WITH datumi AS 
(
	SELECT @pocetni AS DT
	UNION ALL
	SELECT DATEADD(DD, 1, DT)
	FROM datumi
	WHERE DATEADD(DD, 1, DT) <= @krajnji
)
SELECT * FROM datumi
OPTION (MAXRECURSION 0);

Kolacije (Collation)

Objavljeno: 27-02-2014 | Autor: Miloš Milenković | Kategorija: T-SQL

Ознаке:

0

Kolacija se može definisati kao skup pravila koji određuje kako se neki karakter ponaša u određenom jeziku. Najznačajni uticaj ima na sortiranje i poređenje karaktera. U principu, svaki jezik ima svoju kolaciju, koja može biti slična ili čak identična nekoj drugoj. Preko kolacije se definiše osetljivost na veličinu slova, oznake akcenta, tipove kana karaktera i širinu karaktera.

  • Osetljivost na veličinu slova: Ukoliko je podešena osetljivost na veličinu slova, SQL Server će različito tretirati A i a, B i b itd., zbog toga što je ASCII vrednost ovih karaktera različita. Ukoliko nije uključena osetljivost na veličinu slova, navedeni parovi karaktera će biti jednaki za SQL Server.
  • Osetljivost na oznake akcenta: Ukoliko je uključena osetljivost na oznake akcenta, SQL Server će različito tretirati a i á, o i ó itd. U suprotnom, navedeni parovi karaktera će se prilikom poređenja i sortiranja smatrati jednakim. Ovo je posebno važno kada radimo sa jezicima koji imaju ovakve znakove u pismu.
  • Osetljivost na tipove kana karaktera je specifična za japanski jezik. Ukoliko je uključena, Hiragana and Katakana karakteri će se tretirati kao različiti, u suprotnom kao jednaki.
  • Osetljivost na širinu karaktera se odnosi na veličinu karaktera u bajtovima. Ukoliko je uključena, dva ista karaktera od kojih je zbog različitih tipova podataka jedan veličine jednog bajta, a drugi veličine dva bajta će se smatratiti različitim, a u suprotnom jednakim.

Osnovno o privremenim tabelama i tejbl varijablama

Objavljeno: 21-02-2014 | Autor: Milen Blagojević | Kategorija: Saveti

0

Od trenutka kada su uvedene privremene tabele i tejbl varijable u SQL Server vodi se rasprava kada je potrebno koristiti jedne a kada druge, a da bi znali odgovor na ovo pitanje potrebno je poznavati osnovne razlike između njih.
Privremene tabele su u stvari obične tabele koje se definišu i čuvaju u tempdb (sem što privremene tabele ne mogu imati FK i ne mogu se particionisati) i traju onoliko koliko traje sesija u kojoj su kreirane. Privremene tabele mogu biti:

  • Lokalne – kreiraju se sa prefiksom # i vidljive su samo unutar sesije u kojoj se izvršavaju
  • Globalne – kreiraju se sa prefiksom ## i vidljive su iz svih ostalih sesija

Sintaksa za kreiranje privremenih tabela:

Konkatenacija string vrednosti iz razlicitih redova (2. deo)

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.

Višestruko izvršavanje istog upita – GO n

Objavljeno: 15-02-2014 | Autor: Nenad Živković | Kategorija: Management Studio

0

Jedna od manje poznatih funkcionalnosti SQL Server Management Studia, a koja zna da bude korisna povrеmeno, je mogućnost da izvršite istu komadnu (ili grupu komandi) više puta. Naime jednostavno navođenje broja (n) iza reči GO na kraju upita, izvršiće taj upit n puta.

Konkatenacija string vrednosti iz razlicitih redova (1. deo)

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:

Kreiranje XML-a iz SQL tabele

Objavljeno: 05-02-2014 | Autor: Žana (Jovana) Baćović | Kategorija: T-SQL, XML

1

Ako želite da kreirate jednostavan XML koristeći podatke iz SQL tabele, to možete da uradite koristeći XML Path mod u FOR XML klauzuli.

Primjer: Prikazivanje svih crtanih filmova iz Kefalo baze, sa zaglavljem SpisakCrtaca možete da uradite na sledeći način:

SELECT Naziv
FROM dbo.CrtaniFilmovi
FOR XML PATH(""),ROOT("SpisakCrtaca"),TYPE

Kreiranje XML-a sa hijerarhijom

Ukoliko želite da kreirate XML koji sadrži ugnježdene elemente, jedan od načina je da koristite AUTO mod u FOR XML klauzuli.

Primjer:

Nenamerni korelacioni podupiti

Objavljeno: 02-02-2014 | Autor: Nenad Živković | Kategorija: T-SQL

0

Neki od vas znaju šta su korelacioni podupiti (correlated subqueries) i možda ih i koristite. Neki ne znaju i mogu da žive i bez njih. Problem, i to veliki, i jednim i drugim, može da nastane kada upotrebe takve podupite, a da toga nisu ni svesni.

Za primer uzećemo tabelu CrtaniFilmovi iz Kefalo baze, koja kao primarni ključ ima kolonu CrtacID i kao drugu pomoćnu tabelu kreiraćemo temp tabelu #OdabraniCrtaci koja će imati samo jednu kolonu ID.

CREATE TABLE #OdabraniCrtaci (ID INT);
INSERT INTO #OdabraniCrtaci (ID) VALUES (1),(3);

Dodaćemo vrednosti 1 i 3 u tabelu #OdabraniCrtaci, i sadržaj obe tabele će izgledati ovako: