Šā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:
Ierakstīt komentāru