5

Posso avere una singola stored procedure per aggiungere una nuova colonna a una tabella e lavorare sulla colonna afterwords? Ad esempio, ho stored procedure seguente:aggiunta di una colonna nella procedura memorizzata

... 

alter table tb1 
add col1 varchar(1) null 

insert into tb1(col1) 
values ('Y') 

ho ottenuto un errore dicendo

col1 non è valido.

+0

Ti eseguire il comando va dopo aver aggiunto la colonna.? – Muthukumar

+5

Non è possibile avere istruzioni GO nel mezzo di una procedura memorizzata – LittleBobbyTables

+0

SQL Server sta verificando che la colonna esista quando si sta creando il proc, quindi sarà necessario aggiungere manualmente la colonna, creare il proc, quindi rimuovere la colonna per farlo funzionare. Suggerirei la soluzione dinamica SQL che è stata aggiunta a @LittleBobbyTables, anche se probabilmente si usa 'sp_executesql'. –

risposta

11

Provare a creare la tabella con un valore predefinito di "Y" invece di inserire i valori in seguito.

alter table tb1 add col1 varchar(1) not null DEFAULT ('Y') 

Si avrebbe bisogno GO tra le due linee per avere la tabella creata, secondo la documentazione GO:

utilità di SQL Server interpretano GO come un segnale che essi devono inviare il batch corrente di Istruzioni Transact-SQL su un'istanza di SQL Server.

Tuttavia, non è possibile avere istruzioni GO nelle stored procedure.

EDIT

alternativa, è possibile utilizzare l'istruzione EXEC per eseguire il codice:

EXEC ('alter table tb1 add col1 varchar(1) null') 
EXEC ('update tb1 set col1 = ''Y''') 
+0

Dò solo un esempio, in realtà, ho molte altre cose da fare nella stored procedure. Mi chiedo solo se devo modificare il tavolo al di fuori della procedura del negozio? – GLP

+0

@GaolaiPeng - vedere la mia modifica – LittleBobbyTables

+1

In generale è preferibile modificare le tabelle all'esterno di un processo memorizzato. Vuoi davvero aggiungere una colonna ogni volta che viene eseguito proc o aggiungerlo una volta sola? Tieni presente che tutti gli scribi della struttura sono salvati come script SQl e messi nel controllo del codice sorgente per semplificare il loro spostamento verso prod o per ricreare il database su un server anotehr. – HLGEM

Problemi correlati