MS SQL bug

Tuesday, 02.09.2008 – Zidar

Nesto sto sam nedavno otkrio i opekao se: kada navodite listu kolona u SELECT izrazu, pa zaboravite zarez, MS SQL se ne buni, nego jednostavno ignorise deo naredbe. Na primer:

SELECT Artikl, cena, Kolicina FROM Roba

treba da ispise tri kolone. Ako napisete

SELECT Artikl, cena Kolicina FROM Roba

(nema vise zareza iz kolone Cena), MS SQL se nece buniti niti ce prijaviti gresku. jednostavno ce ignorisati kolonu Kolicina. Ako je SELECT izraz slozeniji, pa imate recimo GROUP BY, onda mozete da dobijete potpuno zbunjujuci rezultat.

Mozda je ovo poznato i od ranije, mozda je Microsoft cak napravi service pack, ne znam,  za mene je novost, pa eto da podelim novost.

🙂

  1. 3 Responses to “MS SQL bug”

  2. Pozdrav!

    Nije da se pravim pametan, ali to mu dodje nekako normalno… (barem za oracle) i mislim da to nije bug…
    Evo primera:

    SELECT Artikl, Cena, Kolicina FROM Roba;

    daje:

    artikl | cena | kolicina
    —————————
    Nesto 123 321

    ali ako napises

    SELECT artikl, cena kolicina FROM Roba;

    dobijes lepo:
    artikl | kolicina
    ——————–
    Nesto 123

    Obrati paznju na cenu i kolicinu!!!

    Ako ne navedes zarez iza kolone, to se tretira kao novi naziv postojece kolone!
    Ful sintaksa bi bila:
    SELECT col as prvi_naziv, col2 as drugi_naziv…. FROM table;
    ili skraceno:
    SELECT col prvi_naziv, col2 drugi_naziv, col3 treci_naziv, … FROM table;

    PS. A da vidis tek kakva cuda se daju uraditi sa tim nazivima i ugnjezdenim upitima… ihaaa 😉

    By noctua4u on Sep 2, 2008

  3. Ovo sto je noctua napisao, htio sam i ja napisati. 🙂

    Kad se zarez zaboravi ili namjerno izostavi, onda se to smatra aliasom:
    SELECT artikl, cena Kolicina FROM Roba;
    je isto sto i
    SELECT artikl, cena AS Kolicina FROM Roba;

    Znaci nije Bug, nego feature! 😉

    By Dejan on Sep 2, 2008

  4. Tacno, sad vidim i sam. Hvala na pojasnjenju.

    Kad napises

    SELECT artikl, cena AS Kolicina FROM Roba;

    jasno je da je rec ‘Kolicina’ naziv kolone [cena]. Ja u stvari po starinski uvek i pisem punu sintaksu sa AS pa mi nije palo napamet da moze i bez AS.

    Vise bih voleo da je AS obavezno pri definisanju naziva kolone.

    Zamisite kad bi moglo da se napise

    DELETE * FROM *

    🙂

    By Zidar on Sep 4, 2008

Post a Comment