#1 Insert into
Buenos días.
Tengo una tabla llamada Codigos que maneja información mensual. El campo que me permite saber a qué mes pertenecen los códigos es cPeri.
Tengo un procedimiento que debe copiar la información de la tabla Codigos de un mes determinado a otro nuevo. Hoy en día lo hago de la siguiente manera:
declare @wPeri as varchar(07)
declare @wNumero as int
declare @wNombre as varchar(150)
declare @wFormula as smallint
set @wPeri='2009-10'
declare CRCodigos cursor for select
cNumero,
cNombre,
cFormula from Codigos where cPeri='2009-09'
open CRCodigos
while 01=01
begin
fetch next from CRCodigos into
@wNumero,
@wNombre,
@wFormula
if @@fetch_status=00
begin
insert into Codigos (cPeri, cNumero, cNombre, cFormula)
values(@wPeri, @wNumero, @wNombre, @wFormula)
end
else
begin
break
end
end
close CRCodigos
deallocate CRCodigos
Aclaro que @wPeri pasa como parámetro del procedimiento, y por cuestiones del ejemplo no están hechos los controles para saber si hay que realizar un COMMIT TRANSACTION o un ROLLBACK TRANSACTION.
Quiero reemplazar lo de arriba porque hay tablas a las que se les debe ir agregando campos, y eso implica tener que recordar de actualizar este tipo de procedimientos.
Necesito saber si es posible pasar una variable en lugar de los nombres de los campos en una cláusula INSERT INTO. El ejemplo sería el siguiente:
declare @wCampos as varchar(1000)
declare @wPeri as varchar(07)
set @wCampos='cNumero, cNombre, cFormula'
set @wPeri ='2009-10'
INSERT INTO Codigos (cPeri, @wCampos)
select @wPeri, @wCampos from Codigos where cPeri='2009-09'
donde @wPeri es el nuevo valor a ingresar.
@wCampos originalmente viene de un procedimiento que me devuelve en una cadena los nombres de los campos de la tabla Codigos a excepción del campo cPeri. Acá la declaro como variable fija para ahorrar líneas en el ejemplo.
Esta tabla es un ejemplo, pero son varias tablas con las que tengo que trabajar de la misma forma.
Probé metiendo la cláusula en una cadena para que @wCampos no diera problema y funciona. La contra de esto es que demora mucho más que el 1º ejemplo.
También me permite ahorrar líneas de código y no tendría que estar realizandole mantenimiento a este tipo de procedimientos.
Alguna solución???
Saludos!
Tengo una tabla llamada Codigos que maneja información mensual. El campo que me permite saber a qué mes pertenecen los códigos es cPeri.
Tengo un procedimiento que debe copiar la información de la tabla Codigos de un mes determinado a otro nuevo. Hoy en día lo hago de la siguiente manera:
declare @wPeri as varchar(07)
declare @wNumero as int
declare @wNombre as varchar(150)
declare @wFormula as smallint
set @wPeri='2009-10'
declare CRCodigos cursor for select
cNumero,
cNombre,
cFormula from Codigos where cPeri='2009-09'
open CRCodigos
while 01=01
begin
fetch next from CRCodigos into
@wNumero,
@wNombre,
@wFormula
if @@fetch_status=00
begin
insert into Codigos (cPeri, cNumero, cNombre, cFormula)
values(@wPeri, @wNumero, @wNombre, @wFormula)
end
else
begin
break
end
end
close CRCodigos
deallocate CRCodigos
Aclaro que @wPeri pasa como parámetro del procedimiento, y por cuestiones del ejemplo no están hechos los controles para saber si hay que realizar un COMMIT TRANSACTION o un ROLLBACK TRANSACTION.
Quiero reemplazar lo de arriba porque hay tablas a las que se les debe ir agregando campos, y eso implica tener que recordar de actualizar este tipo de procedimientos.
Necesito saber si es posible pasar una variable en lugar de los nombres de los campos en una cláusula INSERT INTO. El ejemplo sería el siguiente:
declare @wCampos as varchar(1000)
declare @wPeri as varchar(07)
set @wCampos='cNumero, cNombre, cFormula'
set @wPeri ='2009-10'
INSERT INTO Codigos (cPeri, @wCampos)
select @wPeri, @wCampos from Codigos where cPeri='2009-09'
donde @wPeri es el nuevo valor a ingresar.
@wCampos originalmente viene de un procedimiento que me devuelve en una cadena los nombres de los campos de la tabla Codigos a excepción del campo cPeri. Acá la declaro como variable fija para ahorrar líneas en el ejemplo.
Esta tabla es un ejemplo, pero son varias tablas con las que tengo que trabajar de la misma forma.
Probé metiendo la cláusula en una cadena para que @wCampos no diera problema y funciona. La contra de esto es que demora mucho más que el 1º ejemplo.
También me permite ahorrar líneas de código y no tendría que estar realizandole mantenimiento a este tipo de procedimientos.
Alguna solución???
Saludos!
0