Row_Number() OVER (ORDER BY (SELECT 1))
trik by NEMĚL být považován za způsob, jak se vyhnout změně pořadí podkladových dat. Je to pouze způsob, jak zabránit tomu, aby server prováděl dodatečné a nepotřebné řazení (může to přesto provést, ale bude to stát minimální možnou částku ve srovnání s řazením podle sloupce).
Všechny dotazy na SQL serveru NAPROSTO MUSÍ mít ORDER BY
klauzule v nejvzdálenějším dotazu, aby byly výsledky spolehlivě uspořádány zaručeným způsobem.
Koncept „zachování původního řádu“ v relačních databázích neexistuje. Tabulky a dotazy musí být vždy považovány za neuspořádané, dokud a pokud ORDER BY
klauzule je uvedena v nejvzdálenějším dotazu.
Mohli byste zkusit stejný neobjednaný dotaz 100 000krát a vždy ho obdržet se stejnou objednávkou, a tak uvěřit, že se na uvedenou objednávku můžete spolehnout. To by ale byla chyba, protože jednoho dne se něco změní a nebude to mít pořadí, jaké očekáváte. Jedním příkladem je upgrade databáze na novou verzi SQL Server – to způsobilo, že mnoho dotazů změnilo své pořadí. Ale nemusí to být tak velká změna. Něco tak malého jako přidání nebo odebrání indexu může způsobit rozdíly. A více:Instalace aktualizace service pack. Rozdělení stolu. Vytvoření indexovaného zobrazení, které obsahuje příslušnou tabulku. Dosažení určitého bodu zlomu, kdy je místo hledání vybráno skenování. A tak dále.
Nespoléhejte na to, že výsledky budou seřazeny, pokud jste neřekli „Server, ORDER BY
".