テーブルの列を更新してシーケンスにする
-
06-07-2019 - |
質問
ストアドプロシージャの結果を使用してテーブルの列を更新したい
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を返します。
所属していません StackOverflow