データベース テーブルの整数列をリセットするために、SQL Server 2008 でストアド プロシージャに取り組んでいます。この整数列は、項目行の表示順序を格納または保持します。ユーザーは特定の並べ替え順序で項目をドラッグ アンド ドロップでき、この"Order Rank Integer"を使用してデータベース テーブルにその順序を保持します。
アイテムの表示クエリは、データを取得するときに常に「ORDER BY OrderRankInt」を追加して、ユーザーが以前に指定した順序でアイテムを表示するようにします。
問題は、テーブル項目が少し並べ替えられた後、この整数列が多くの重複値を収集することです。したがって...
Table
--------
Name | OrderRankInt
a | 1
b | 2
c | 3
d | 4
e | 5
f | 6
ユーザーによる多くの再注文の後、....
Table
--------
Name | OrderRankInt
a | 1
b | 2
c | 2
d | 2
e | 2
f | 6
これらの重複は、主に挿入とユーザー指定の注文番号が原因です。注文ランクの重複を防ごうとしているわけではありませんが、アイテムの挿入/変更に関する表を「修正」する方法が必要です。
単一の UPDATE クエリでOrderRankInt列をリセットする方法はありますか? または、カーソルを使用する必要がありますか? そのカーソルの構文はどのようになりますか?
ありがとう、ケルビン
編集
Remus Rusanuソリューションで更新します。ありがとう!!
CREATE PROCEDURE EPC_FixTableOrder
@sectionId int = 0
AS
BEGIN
-- "Common Table Expression" to append a 'Row Number' to the table
WITH tempTable AS
(
SELECT OrderRankInt, ROW_NUMBER() OVER (ORDER BY OrderRankInt) AS rn
FROM dbo.[Table]
WHERE sectionId = @sectionId -- Fix for a specified section
)
UPDATE tempTable
SET OrderRankInt = rn; -- Set the Order number to the row number via CTE
END
GO