質問

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

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

役に立ちましたか?

解決

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

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を返します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top