Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Изчисляване на SQL Server ROW_NUMBER() OVER() за извлечена таблица

Row_Number() OVER (ORDER BY (SELECT 1)) трик трябва да НЕ да се разглежда като начин да се избегне промяна на реда на основните данни. Това е само средство да се избегне налагането на сървъра да извърши допълнително и ненужно сортиране (може пак да извърши сортирането, но ще струва минималната възможна сума в сравнение със сортирането по колона).

Всички заявки в SQL сървъра АБСОЛЮТНО ЗАДЪЛЖИТЕЛНИ има ORDER BY клауза в най-външната заявка, за да бъдат резултатите надеждно подредени по гарантиран начин.

Концепцията за „запазване на първоначалния ред“ не съществува в релационните бази данни. Таблиците и заявките винаги трябва да се считат за неподредени до и освен ако ORDER BY клауза е посочена в най-външната заявка.

Можете да опитате една и съща неподредена заявка 100 000 пъти и винаги да я получавате с една и съща подредба и по този начин да повярвате, че можете да разчитате на тази подредба. Но това би било грешка, защото един ден нещо ще се промени и няма да има реда, който очаквате. Един пример е, когато база данни е надстроена до нова версия на SQL Server - това е накарало много заявки да променят своя ред. Но не е нужно промяната да е толкова голяма. Нещо толкова малко като добавяне или премахване на индекс може да причини разлики. И още:Инсталиране на сервизен пакет. Преграждане на маса. Създаване на индексиран изглед, който включва въпросната таблица. Достигане на повратна точка, при която се избира сканиране вместо търсене. И така нататък.

Не разчитайте, че резултатите ще бъдат подредени, освен ако не сте казали „Сървър, ORDER BY ".




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкване на ред само ако вече не е там

  2. Вземете основен родител на дете в йерархична таблица

  3. Как да коригирате „Преобразуването не бе успешно при преобразуване на стойността в тип данни“ в SQL Server

  4. Какво означава =*?

  5. изберете влошаване на производителността на отчета, когато използвате DISTINCT с параметри