piektdiena, 2014. gada 6. jūnijs

Vaicājuma sadalīšana vairākās daļās

Pēdējās nedēļās tā vairāk sanācis nodarboties ar ātrdarbības lietām. Šeit neliels sausais atlikums un daži padomi, kas var noderēt dzīvē.

trešdiena, 2014. gada 4. jūnijs

Parametra deklarēšana cikla iekšienē

Šāds T-SQL vaicājums (orģinālā mainīgie kursora iekšienē):

declare @i int = 0

while @i < 5
begin
declare @a int;
declare @b int;

Set @a = @i;

if @i <= 2 
Set @b = @a;

select @i i, @a a, @b b;

Set @i+=1;
end

Kādas būs vērtības @b parametram tad, kad @i > 2? Es biju iedomājies, ka Null, bet nekā, lai arī parametra deklarēšana notiek cikla iekšienē, tas joprojām būs 2 (Null tikai pirms pirmreizējas vērtības piešķiršanas).

Starp citu, arī šāds vaicājums nestrādās, lai uz pirmo acu uzmetienu liekas visai korekts (nevar deklarēt divās vietās viena bach ietvaros):

declare @x int = -1;
if(@x>0)
begin
Declare @j int = 5
end
else
begin 
Declare @j int = -5
end

Lai nu kā, parametrus rekomendē deklarēt procedūras/vaicājuma sākumā. Šis ir viens no iemesliem kāpēc tā.