Row_Number() OVER (ORDER BY (SELECT 1))
sztuczka NIE być postrzegane jako sposób na uniknięcie zmiany kolejności podstawowych danych. Jest to tylko sposób na uniknięcie sytuacji, w której serwer wykonuje dodatkowe i niepotrzebne sortowanie (nadal może wykonywać sortowanie, ale będzie to kosztować minimalną możliwą kwotę w porównaniu z sortowaniem według kolumny).
Wszystkie zapytania na serwerze SQL Absolutnie MUSZĄ mieć ORDER BY
w najbardziej zewnętrznym zapytaniu, aby wyniki były uporządkowane w sposób niezawodny i gwarantowany.
Pojęcie „zachowania pierwotnego porządku” nie istnieje w relacyjnych bazach danych. Tabele i zapytania należy zawsze uważać za nieuporządkowane do momentu, aż ORDER BY
klauzula jest określona w najbardziej zewnętrznym zapytaniu.
Możesz wypróbować to samo nieuporządkowane zapytanie 100 000 razy i zawsze otrzymywać je w tej samej kolejności, a tym samym uwierzyć, że możesz polegać na tej kolejności. Ale to byłby błąd, bo pewnego dnia coś się zmieni i nie będzie miało takiej kolejności, jakiej oczekujesz. Jednym z przykładów jest aktualizacja bazy danych do nowej wersji SQL Server — spowodowało to zmianę kolejności wielu zapytań. Ale to nie musi być tak duża zmiana. Coś tak małego jak dodanie lub usunięcie indeksu może powodować różnice. I więcej:Instalacja dodatku Service Pack. Partycjonowanie tabeli. Tworzenie indeksowanego widoku zawierającego daną tabelę. Dotarcie do punktu krytycznego, w którym zamiast poszukiwania wybiera się skanowanie. I tak dalej.
Nie polegaj na wynikach, które mają zostać zamówione, chyba że powiedziałeś „Serwer, ORDER BY
".