2

PostgrSQLでは、これを行うのに問題はありません。

CREATE SEQUENCE serial_olw START 1;
update collections_elements set elementorder=(nextval('serial_olw')-1) WHERE collections_elements.collectionid=1;
drop sequence serial_olw;

例:1,2,3,4,5,6 .. ..

MS-SQL Server 2008には関数SEQUENCEがないので、これを試しました。

DECLARE @i int
SET @i = 0

WHILE @i<44
    BEGIN
    UPDATE collections_elements set elementorder=(@i) WHERE collections_elements.collectionid=1
        SET @i=@i+1
    END

しかし、私はそのループで成功していません...

例:43,43,43,43,43 .. ..

解決策のアイデアはありますか?

4

4 に答える 4

3
Update t
Set t.elementorder = t.RowID
From
(
    Select ROW_NUMBER() Over(Order by collectionid) as RowID, * From collections_elements
)t

SQL フィドル

于 2012-05-25T10:04:54.360 に答える
1
update T
set elementorder = rn
from
  (
    select elementorder,
           row_number() over(order by (select 0)) as rn
    from collections_elements
    where collectionid = 1
  ) T

SEデータ

于 2012-05-25T10:51:33.667 に答える