2016-04-11 21 views
-1

私はクエリを書くためにいくつかの助けが必要です。SQLの更新ループのクエリ

私はデータベーステーブルに400000件近くのレコードがある状況があります。

一度に4000000行を選択する必要があります.1000レコードごとに、ループ内の数値で列を更新する必要があります。

ただし、その数値は1000行ごとに1ずつ増分する必要があります。

したがって、数値が1の最初の1000行。数値が2の2行目の1000行。すべてのレコードに対してこのプロセスを繰り返します。

ありがとうございます。

+0

私はrow_number()関数を使用しようとしていました。しかし、それはすべての行に対して1ずつ増加します。 – 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 Serverの合計ショットを示します。これが正しいDBMSなのか、あなたの列が何であるかは分かりません。しかし、関係なく、あなたはこのようなことのためにループを使う必要はありません。

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. OPが探しているものではありません。 :) –

+0

あなたの答えはOPの状態、はいと厳密です。しかし、SELECTが意図的にソートされていない限り、それは無関係だと思っていました。さもなければランダムで、私の提案になります。しかし、はい、あなたは正しい、そうでないとは言わない=) –