Ваш запрос не имеет смысла. Вы действительно не задаете условие order by
во внешнем запросе, так зачем беспокоиться?
Возможно, вы хотите добавить значение «номер строки» к выходу. Если это так, то row_number()
принадлежит в select
, а не order by
:
SELECT A.*, ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM Mytable A;
SQL Server не допускает постоянные значения в ORDER BY
- либо в функции окна или в пункте ORDER BY
. Подзапрос SELECT NULL
- это способ обойти это. Обычно целочисленное выражение в ORDER BY
является индексом, относящимся к столбцу, подлежащему упорядочению. Это работает для предложения ORDER BY
, но не для функции окна. SQL Server также отклоняет другие константы.
По моему опыту, это не приводит к дополнительной сортировке. Насколько мне известно, это не документировано.
Как говорит erros: вы не можете использовать номера столбцов в ORDER BY внутри ROW_NUMBER, это работает только на ORDER BY для всего оператора. Вам нужен ROW_NUMBER для каждого отдельного столбца? – Iztoksson