MS SQL bug
Tuesday, 02.09.2008 – ZidarNesto 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.
🙂
3 Responses to “MS SQL bug”
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
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
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