Daily SQL WTF

A minap épp SQL kódon csináltam code reviewt és belefutottam egy igen érdekes kódrészletbe. A kis piszok természetesen egy hosszú tárolt eljárás közepén bújt meg, szép hosszú változó- és oszlopnevekkel, de a lényeg leegyszerűsítve ez:

DECLARE @a bit = 0
DECLARE @b bit = 0

SELECT    
    @a = 1,
    @b = CASE WHEN @a=1 THEN 1 ELSE 0 END

Vajon mi a gondom vele?

 

Technorati-címkék: ,
Advertisements

5 thoughts on “Daily SQL WTF

  1. Fekete Krisztián

    Szia Gyuri,

    tipp: az ‘a’ mindig 1, tehát igaz, ezáltal a ‘b’ is mindig igaz lesz?

    Krisztián

    Reply
  2. kketto

    Gondolom SQL 2005 és fölötte…
    Azaz ha tényleg paralell hajtódik végre, akkor a @b-ben a végére akármi is lehet, attól függően melyik rész jut hamarabb.
    Gondolom én 🙂
    ( MAXDOP(1) hint-tel “jó” lehet)

    Reply
  3. Balássy György Post author

    Köszönöm mindenkinek a tippeket.
    Ahogy írtam is, ez egy igencsak leegyszerűsített változata az eredeti kódnak. Az zavar benne leginkább, hogy karbantarthatatlan, vagy legalábbis egy apró, ártatlannak tűnő módosítással teljesen más eredményt tud adni. Aztán győzd debuggolni.
    Elég megcserélni a SELECT eredményhalmazának két oszlopát és máris kész a baj. Erre nem számít az ember, amikor a fejébe verik adatbázis-elméletből, hogy az oszlopok és a sorok sorrendje lényegtelen.

    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 )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s