Jak už to bývá, dělá se nejvíce chyb v těch nejjednodušších věcech, které jsou “přeci každému úplně jasné”. Takovou samozřejmostí je např. vytváření aliasů (klauzule AS). MS SQL Server je schopen zpracovat opravdu vše, na co si jen může čtenář při způsobech přejmenování vzpomenout a určitě ještě něco navíc:
(Pro demostraci bylo použito číslo 1, při výběru sloupce z tabulky již tolik možností na alias není.)
Takže se asi shodneme, že ve vytváření aliasů se nejspíš nedá udělat chyba. Mám tedy pro vás kontrolní otázku:
Co vrátí dotaz SELECT COUNT(*) Table_A?
Asi vás prvně trkne, že tam chybí klauzule FROM. To je záměr, berme to jako chybu vzniklou kopírováním. Tento dotaz se korektně spustí.
Navrátí sloupec pojmenovaný Table_A s jedním řádkem s hodnotou 1. Pokud uděláte takovouto chybu např. vkopírováním ve složitějším dotazu, budete ji jen těžce odhalovat.
Jelikož se jazyk SQL velice podobá běžné řeči, vznikají chyby výmýšlením si nových příkazů či pouze překlepem:
SELECT * FROM Table_A
UNIONWITH
SELECT * FROM Table_B
Takovýchto novotvarů zvláště u nerodilých mluvčích vzniká celkem dost, příkladem: UNION x ONION x UNIONWITH, INTERSECT x INTERCEPT x INTERSECTWITH atd.
Ještě jsme si neuvedli, co bude výstupem výše uvedeného příkazu. Původně to mělo být sjednocení dvou tabulek pomocí UNION, nyní jsou výsledkem 2 tabulky: tabulka Table_A dostala alias UNIONWITH a druhá se nadále jmenuje Table_B. Tato jména ale ve výpisu neuvidíme, o co je to zrádnější.
Obrana proti těmto chybám bohužel neexistuje kvůli až příliš benevolentnímu zpracování SQL/T-SQL kódu. A na obarvování u IntelliSence se bohužel také nemůžeme 100% spolehnout ![]()