У меня есть таблица с уникальным столбцом идентификатора, который является int. Это не обязательно содержит все числа до максимума, некоторые из них пропущены (это не столбец идентичности - из моего контроля).SQL ROW_NUMBER добавление к переменной
Мне нужно ВЫБРАТЬ некоторые существующие строки из этой таблицы и добавить их в конец, изменяя данные одного столбца, причем каждая строка имеет новый идентификатор, увеличиваясь с MAX ID. Что-то вроде этого:
declare @maxID int;
set @maxID = (select MAX("ID") from "table");
insert into "table"
select @maxID + ROW_NUMBER, 'newData', "col3", "col4"
from "table" where "col2" = 'oldData';
Однако, я не знаю, где взять его из здесь - ROW_NUMBER требует заявление, над которым я честно не понимаю в этом контексте.
Любая помощь?
Отлично, спасибо. Не могли бы вы подробнее рассказать о том, зачем нужен оператор OVER, а не просто перечислять результаты SELECT? – Dan
Ну, для синтаксиса 'ROW_NUMBER' требуется ключевое слово 'OVER'. Это не может быть проще. 'ORDER BY' требуется, потому что' ROW_NUMBER' не знает, в каком порядке перечислять. –
Логически не существует «естественного» порядка строк в базе данных (хотя мы, люди, склонны видеть естественный порядок так же, как кластерный индексный порядок), поэтому ROW_NUMBER должен иметь некоторое представление о том, какой порядок вы хотите видеть записи. – Rikalous