Row_Number() OVER (ORDER BY (SELECT 1))
трик трябва да НЕ да се разглежда като начин да се избегне промяна на реда на основните данни. Това е само средство да се избегне налагането на сървъра да извърши допълнително и ненужно сортиране (може пак да извърши сортирането, но ще струва минималната възможна сума в сравнение със сортирането по колона).
Всички заявки в SQL сървъра АБСОЛЮТНО ЗАДЪЛЖИТЕЛНИ има ORDER BY
клауза в най-външната заявка, за да бъдат резултатите надеждно подредени по гарантиран начин.
Концепцията за „запазване на първоначалния ред“ не съществува в релационните бази данни. Таблиците и заявките винаги трябва да се считат за неподредени до и освен ако ORDER BY
клауза е посочена в най-външната заявка.
Можете да опитате една и съща неподредена заявка 100 000 пъти и винаги да я получавате с една и съща подредба и по този начин да повярвате, че можете да разчитате на тази подредба. Но това би било грешка, защото един ден нещо ще се промени и няма да има реда, който очаквате. Един пример е, когато база данни е надстроена до нова версия на SQL Server - това е накарало много заявки да променят своя ред. Но не е нужно промяната да е толкова голяма. Нещо толкова малко като добавяне или премахване на индекс може да причини разлики. И още:Инсталиране на сервизен пакет. Преграждане на маса. Създаване на индексиран изглед, който включва въпросната таблица. Достигане на повратна точка, при която се избира сканиране вместо търсене. И така нататък.
Не разчитайте, че резултатите ще бъдат подредени, освен ако не сте казали „Сървър, ORDER BY
".