0

ストアド プロシージャの結果を使用してテーブルの列を更新したい

create procedure seq
as
DECLARE @NextValue INT;
INSERT SequencesTable DEFAULT VALUES;
DELETE SequencesTable WITH(READPAST); 
SELECT SCOPE_IDENTITY();
go

ノードターミニスティックであるため、UDF を使用できません。このようなものは機能しません

UPDATE [dbo].[t1]     SET [c1] = seq

私はこれに間違った方法でアプローチしていると感じています。

このようなテーブルを更新したいだけです

1 1
2 2
1 4
1 4
5 5
1 2

このように見えるように

1 1
2 2
3 4
4 4
5 5
6 2

4

1 に答える 1

4

次のようなことを試してください:

update a set c1 = c1_new
from (
  select 
    c1, c2
  , c1_new = row_number() over (order by nullif(c1,c1))
  from dbo.t1
  ) a

気に入ったものが得られるまで内部クエリをいじってから、更新を適用します。

NULLIF(c1,c1) は、ディスク上で元の順序を保持しようとします。常に null を返します。

于 2009-06-23T00:56:15.080 に答える