Pregunta

Deseo actualizar la columna de una tabla utilizando los resultados de un procedimiento almacenado

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

No puedo usar un UDF ya que es nodeterministic. Algo como esto no funcionará

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

Tengo la sensación de que me estoy acercando a esto de la manera incorrecta.

Solo quiero actualizar una tabla con este aspecto

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

Para lucir así

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

¿Fue útil?

Solución

Pruebe algo como esto:

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

Juega con la consulta interna hasta que obtengas algo que te guste, luego aplica la actualización.

El NULLIF (c1, c1) intenta preservar el orden original en el disco. Siempre devuelve nulo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top