SQL mit ír ki

Code review közben akadtam rá az alábbi érdekes mintára, természetesen sokkal bonyolultabb formában. A kérdés a szokásos: mit ír ki?

DECLARE @condition int = 0
DECLARE @new int

IF @condition = 1
BEGIN
    DECLARE @old int = 5
END    

SET @new = @old

SELECT @new

 

 

Technorati-címkék: ,

6 thoughts on “SQL mit ír ki

  1. kketto

    Nyilván a bonyolultabb formában nem volt ilyen trivi, hogy nem fut rá az if magjába.
    Szóval, ez itt arra akar lenni példa – ha jól gondolom – hogy a DECLARE az olyan batch scope-ú variable-kat csinál, de az érték adás az meg a feltételtől függően vagy lefut vagy se.
    Tanulság (én nem is tnnék ilyent, mert megtévesztő lehet első látásra): lehet ugyan, de ne csináljunk ilyent (declare + assign összevonása, declare-t szedjük if, while, stb. blokkokból ha lehet).

    1. Balássy György Szerző

      Bocs, Laci, de ezzel nem értek egyet, vagy csak nem látom, hogy miért mondod. Ez egy marha hosszú tárolt eljárásból az egyszerűség kedvéért kiragadott 8 sor. Természetesen az 1.0 verziójában nem így nézett ki a kód, újabb feature-ök bekerülésével vált apránként ilyenné. Ráadásul a hibás ágra vagy fél évig nem is futott rá, nem is volt vele semmi probléma.

  2. laci hornyacsek

    Tervezési “hiba”, hogy blokkon belül enged deklarálni, viszont a blokkon kívül is látható a változó.

    Ezért írtam, hogy “bűzlik” t-sql. Persze a kód is bűzlik ettől, de ez sokkal inkább a t-sql “szégyene”, mint az ezt kihasználó programolóé.

    Abba viszont nem lehet belekötni, hogy miért null a végeredmény, és ezen a ponton egyáltalán nem bűzlik a kód, mert az is lehet egy tervezői hozzáállás, hogy ha null az értéke a kód végén, akkor nem került be a vezérlés az if blokkjába, tehát az a rész biztosan nem hajtódott végre. Az más kérdés, hogy ezt másként is lehet ellenőrizni.

    Dobro kutty!

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s