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ā.

Nav komentāru:

Komentāra publicēšana