5

¿Puedo tener un único procedimiento almacenado para agregar una nueva columna a una tabla y trabajar en la columna de palabras posteriores? Por ejemplo, he procedimiento almacenado siguiente:agregando una columna en el procedimiento almacenado

... 

alter table tb1 
add col1 varchar(1) null 

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

me dio un error diciendo

col1 no es válido.

+0

No ejecutar comandos ir después de añadir la columna.? – Muthukumar

+5

No puede tener instrucciones 'GO' en medio de un procedimiento almacenado – LittleBobbyTables

+0

SQL Server está comprobando que la columna existe cuando está creando el proceso, por lo tanto, debe agregar manualmente la columna, crear el proceso y luego eliminar la columna para hacer que esto funcione Sugeriría la solución SQL dinámica que @LittleBobbyTables ha agregado, aunque posiblemente use 'sp_executesql' en su lugar. –

Respuesta

11

Intente crear la tabla con un valor predeterminado de 'Y' en lugar de insertar los valores posteriormente.

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

Se necesitaría GO entre las dos líneas de tener la tabla creada, según la documentación GO:

utilidades de SQL Server interpretan GO como una señal de que deben enviar el lote actual de Instrucciones de Transact-SQL a una instancia de SQL Server.

Sin embargo, no puede tener declaraciones GO en procedimientos almacenados.

EDITAR

Alternativamente, se puede utilizar la instrucción EXEC para ejecutar su código:

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

Acabo de dar un ejemplo, en realidad, tengo muchas otras cosas que hacer en el procedimiento almacenado. Me pregunto si tengo que modificar la mesa fuera del procedimiento de la tienda. – GLP

+0

@GaolaiPeng - ver mi edición – LittleBobbyTables

+1

En general, es una mejor opción alterar las tablas fuera de un proceso almacenado. ¿Realmente desea agregar una columna cada vez que ejecuta el proc o solo lo agrega una vez? Además, debe tener todos los intercambios de estructura guardados como scripts SQl y ponerlos en control de fuente para que sea más fácil moverlos a prod o recrear la base de datos en un servidor anotehr. – HLGEM

Cuestiones relacionadas