2016-04-11 4 views
-1

Мне нужна помощь в написании запроса.SQL update loop query

У меня есть ситуация, когда у меня есть около 400000 записей в таблице базы данных.

Мне нужно выбрать 4000000 строк за раз, и для каждых 1000 записей мне нужно обновить столбец с числовым значением в цикле.

Но это числовое значение должно увеличиваться на единицу, каждые 1000 строк.

Итак, пример первых 1000 строк с числовым значением 1. Затем введите следующие 1000 строк с числовым значением 2. Повторите этот процесс ко всем записям.

Thank you.

+0

Я пытался использовать функцию row_number(). Но это увеличивается на единицу для каждой строки. – lemondash

+0

sql server или mysql? –

+0

Вот отличное место для начала. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

ответ

1

Вот полный снимок в темноте для сервера sql. Не знаю, является ли это правильной СУБД или какой-либо из ваших столбцов. Но независимо от того, что вам не нужно использовать цикл для такого рода вещей.

with MyCTE as 
(
    select * 
     , ROW_NUMBER() over (order by Something) as RowNum 
    from MyTable 
) 

update MyCTE 
set SomeNumberColumn = (RowNum/1000) + 1 
+0

Или вы могли; set SomeNumberColumn = RowNum% 1000 –

+0

@RicardoC, что не совсем работает. Они хотят, чтобы все значения от 1 до 999 были равны 1. Рассмотрим строку 55. 55% 1000 = 55. Не совсем то, что ищет ОП. :) –

+0

ваш ответ строг к тому, что говорит OP, да. Но я думал, что это не имеет значения, если SELECT намеренно отсортирован, иначе это будет случайным и, следовательно, моим предложением. Но, да, вы правы, не говоря иначе =) –