2017-01-07 23 views
0

列(int)を更新しようとしていますが、1つ増分していませんが、8行ごとに増分しています。表1SQL Server:列の値を1つ増やす

:だから、これをやっている

ID FIELD_NUMBER 
---------------- 
1 3507572 
2 3507572 
3 3507572 
4 3507572 
5 3507572 
6 3507572 
7 3507572 
8 3507572 
9 3507573 
10 3507573 
11 3507573 
12 3507573 
13 3507573 
14 3507573 
15 3507573 
16 3507573 

それは1 3507572、3507573ずつ増加すべきである、など

コード:なぜ

DECLARE @id INT 
SET @id = 3507571 

UPDATE table1 
SET @id = FIELD_NUMBER = @id + 1 
GO 

わかりません。私はSQL Server 2012を使用しています。

+1

これは保証アプローチではありません。おそらくDOPが8の並行計画になっているでしょう。 –

+0

DOPはどういう意味ですか? –

+0

並列度。代わりにrow_numberを使用する必要があります。 –

答えて

2

より良いアプローチは、更新可能なCTEを使用することです:

DECLARE @id INT; 
SET @id = 3507571; 

with toupdate as (
     select t1.*, row_number() over (order by field_number) as seqnum 
     from table1 t1 
    ) 
update toupdate 
    set field_number = @id + seqnum; 
+0

スクリプトの前に通常のように '@id'を宣言する必要がありますか? –

+0

@ PeterSun。 。 。または値をハードコードします。 –

+0

それは私が想像している 'order by id'でなければなりません。 –

関連する問題