Обновите столбец таблицы, чтобы она была последовательностью

StackOverflow https://stackoverflow.com/questions/1030118

  •  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) пытается сохранить первоначальный порядок на диске. Всегда возвращает ноль.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top