1

テーブルの行をループしたい.. OrderID を @NUMCOUNT に設定して、「フォーム オプション」を並べ替えます...

リストの順序を並べ替えたい。これを行う必要がある理由は、フォーム オプションを削除すると、順序が乱れるためです..つまり、(1, 2, 3, 5).. (1, 2, 3, 4). が必要になります。等..

表の例:

IDオーダーIDフォームオプション

1 1 名前

2 3 アドレス 2

3 2 アドレス 1

DECLARE @NUMCOUNT int
SET @NUMCOUNT = 0
WHILE (SELECT Count(OrderID) FROM FormOptions WHERE ProductID=1) > @NUMCOUNT
BEGIN
   SET @NUMCOUNT = @NUMCOUNT + 1
   PRINT 'The count is ' + CAST(@NUMCOUNT as char)
   UPDATE FormOptions SET OrderID = @NUMCOUNT WHERE ID=????
END
4

3 に答える 3

3

順序付きリストから削除し、特定の位置で順序付きリストに挿入できるようにする必要がある何かに取り組んでいると思います。削除するために順序を密にする必要はありませんが、次のように実行できます。

delete from FormOptions
  where OrderId = @SelectedFormOption
update FormOptions
  set OrderId = OrderId - 1
  where OrderId > @SelectedFormOption

それをトランザクションでラップしたい場合があります。 (これはかなり重要なので、トランザクションを理解していることを確認してください。)

挿入は似ています:

update FormOptions
  set OrderId = OrderId + 1
  where OrderId >= @TargetOrderId
insert into FormOptions
  ( OrderId, ... ) values ( @TargetOrderId, ... )

注文ポジションの交換は、1 回の更新でアトミックに行うことができます。

 update FormOptions
   set OrderId = case when OrderId = @TargetA then @TargetB else @TargetB end
   where OrderId in ( @TargetA, @TargetB )

同様updateに、1 つのフォーム オプションを順序の 1 つ上または下に移動するように記述できます。

于 2013-04-07T02:20:22.263 に答える