È possibile creare una colonna e inserire valori durante la stessa transazione? Questo fa parte di uno script di aggiornamento. Ho trovato il seguente metodo online, ma non funziona; Viene visualizzato un messaggio di errore: Invalid column name 'IndexNumber'.
. Suppongo che ciò sia dovuto al fatto che la transazione non ha ancora creato la colonna, quindi non c'è nulla da inserire.Crea una colonna e inseriscila all'interno della stessa transazione?
Le parti rilevanti del mio script:
Print 'Beginning Upgrade'
Begin Transaction
-- --------------------------------------------------------------------
USE [MyDatabase];
/* Widgets now can be ordered and the order can be modified */
ALTER TABLE [dbo].[Widgets] ADD [IndexNumber] [int] NULL;
DECLARE @ind INT
SET @ind = 0
UPDATE [dbo].[Widgets]
SET @ind = [IndexNumber] = @ind + 1;
ALTER TABLE [dbo].[Widgets] ALTER COLUMN [IndexNumber] [int] NOT NULL;
-- --------------------------------------------------------------------
Commit tran
Print 'Upgrade completed'
Il motivo per cui [IndexNumber]
non è una colonna di identità è che deve essere modificabile.
Sembra buono. L'utilizzo di un exec farà sì che la dichiarazione venga eseguita al di fuori della transazione o dopo di essa? Per quanto riguarda il tuo precedente commento sull'upgrade effettivo non funzionante, potrebbe essere il caso, ma questo è il mio unico vantaggio al momento. – Nenotlep
@Nenotlep - no, sarà ancora all'interno della stessa transazione. –
Questo sembra davvero il modo più semplice per andare, che per me è praticamente il migliore. Usando questo invece di GO non devo riordinare le mie etichette o ripensare il mio flusso di script. Saluti! – Nenotlep