Domanda

Voglio aggiornare la colonna di una tabella usando i risultati di una procedura memorizzata

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

Non posso usare un UDF poiché è nodeterministico. Qualcosa del genere non funzionerà

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

Ho la sensazione che mi sto avvicinando a questo nel modo sbagliato.

Voglio solo aggiornare una tabella simile a questa

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

Assomigliare a questo

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

È stato utile?

Soluzione

Prova qualcosa del genere:

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

Gioca con la query interna fino a ottenere qualcosa che ti piace, quindi applica l'aggiornamento.

NULLIF (c1, c1) tenta di conservare l'ordine originale sul disco. Restituisce sempre null.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top