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: ,
Advertisements

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

    Reply
  2. Balássy György Post author

    Ebben az a szép, hogy ez nem egyszerre kerül be ilyen formában a kódba. A kód fejlődésének eredményeként egyszer csak kialakul ez a helyzet, és talán észre sem veszi az ember.

    Reply
    1. Balássy György Post author

      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.

      Reply
  3. 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!

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s