0

複数行の結果セットで返される列の int 値を 1 ずつインクリメントできるようにしたいと考えています。たとえば、次のクエリは、次のようなテーブルから結果セットを返します。

select numinbatch from items i where i.ID > @itemID and i.BatchID = @batchID

4
5
6
7

次のように、これらの値を 1 ずつインクリメントして更新します。

5
6
7
8

今のところ次のものがありますが、プラス記号の下に赤い波線のエラー行が表示されます。

declare @idToIncrement as int
declare cur cursor fast_forward for select numinbatch from items i where i.ID > @itemID and i.BatchID = @batchID

    open cur
    fetch next from cur into @idToIncrement

    while @@FETCH_STATUS = 0
    Begin
    EXEC

    --increment numinbatch or @idToIncrement
    @idToIncrement= @idToIncrement + 1

     fetch next from cur into @field1, @field2
    END

    close cur
    deallocate cur

カーソルはパフォーマンスに悪いことを知っているので、より良い解決策があれば自由に共有してください。

4

2 に答える 2

4

私は次のようにします:

select numinbatch + 1 numinbatch_increased_by_1
  from items i
 where i.ID > @itemID and i.BatchID = @batchID

UPDATE値をテーブルに入れたい場合は、

UPDATE items i
   SET numinbatch = numinbatch + 1
 WHERE i.ID > @itemID AND i.BatchID = @batchID
于 2013-03-28T21:03:21.623 に答える
1
SELECT numinbatch + 1 FROM items WHERE ID > @itemID AND BatchID = @batchID

numinbatch が数値であると仮定します。カーソルは必要ありません。

于 2013-03-28T21:04:08.997 に答える