procedimientos reutilizables
Publicado por Maria Eugenia Paradas (6 intervenciones) el 29/10/2007 20:40:29
Hola, gracias de antemano por la ayuda!!! Necesito crear un procedimiento reutilizable para insertar telefonos en varias base de datos, para ello estoy creando el siguiente store procedure:
ALTER PROCEDURE insertar_telfonos_reutilizable @tabla_origen varchar(50), @campo_tele varchar(50), @campo_cedula varchar(50), @campo_conf varchar(20), @tabla_destino varchar(50), @idfuente varchar(50)
AS
BEGIN
DECLARE
@contador numeric(15,0),
@msg varchar(30),
@cedula varchar(20),
@cod_area varchar(4),
@numero varchar(10),
@confiabilidad INT,
@valor varchar(2),
@valor2 varchar(2),
@longi varchar(7),
@sentencia_cursor varchar(500),
@sentencia_existe varchar(500),
@sentencia_insert varchar(500),
@error int,
@tabla varchar(20)
select @longi='7'
if (@tabla_origen like '%ecuador%')
begin
select @valor='1'
select @valor2='2'
end
else if (@tabla_origen like '%venezuela%')
begin
select @valor='4'
select @valor2='5'
end
else if (@tabla_origen like '%argentina%')
begin
select @valor='0'
select @valor2='1'
select @longi='0'
end
select @error= 0
declare cc
cursor for select @cedula,substring(@campo_tele ,1,@valor),substring(@campo_tele,@valor2,@longi),@campo_conf from @tabla where @campo_cedula is not null and @campo_tele is not null
exec (@sentencia_cursor)
open cc(@TABLA_ORIGEN)
select @contador=1 fetch next from cc into @cedula,@cod_area,@numero,@confiabilidad
while (@@fetch_status =0)
BEGIN
select @sentencia_existe= 'select 1 from ' + @tabla_destino + ' where cedula =' + @cedula + ' and cod_area=' + @cod_area + ' and numero=' + @numero
exec @error= @sentencia_existe
if(@error <> 1)
begin
select @sentencia_insert= 'insert ' + @tabla_destino + '(cedula,cod_area,numero,idfuente,confiabilidad,tipo,clase) values(' + @cedula + ',' + @cod_area + ',' + @numero + ',' + @idfuente + ',' + @confiabilidad + ',' + 'case when ' + @cod_area + '=''9'' then ''CEL'' else ''LCL'' end, case when ' + @cod_area + '=''9'' then ''M'' else ''H'' end)'
exec (@sentencia_insert)
end
SELECT @MSG=CONVERT(CHAR(30),@contador)
PRINT @MSG
SELECT @contador=@contador + 1
select @error=0
fetch next from cc into @cedula,@cod_area,@numero,@confiabilidad
END
close cc
deallocate cc
END
De alguna manera no me reconoce a la hora de declarar el cursor el nombre de la tabla, q se compone de "base..tabla" y me gustaria saber porque y como podria solucionarlo
Gracias,
SAludos
Maria Eugenia Paradas
ALTER PROCEDURE insertar_telfonos_reutilizable @tabla_origen varchar(50), @campo_tele varchar(50), @campo_cedula varchar(50), @campo_conf varchar(20), @tabla_destino varchar(50), @idfuente varchar(50)
AS
BEGIN
DECLARE
@contador numeric(15,0),
@msg varchar(30),
@cedula varchar(20),
@cod_area varchar(4),
@numero varchar(10),
@confiabilidad INT,
@valor varchar(2),
@valor2 varchar(2),
@longi varchar(7),
@sentencia_cursor varchar(500),
@sentencia_existe varchar(500),
@sentencia_insert varchar(500),
@error int,
@tabla varchar(20)
select @longi='7'
if (@tabla_origen like '%ecuador%')
begin
select @valor='1'
select @valor2='2'
end
else if (@tabla_origen like '%venezuela%')
begin
select @valor='4'
select @valor2='5'
end
else if (@tabla_origen like '%argentina%')
begin
select @valor='0'
select @valor2='1'
select @longi='0'
end
select @error= 0
declare cc
cursor for select @cedula,substring(@campo_tele ,1,@valor),substring(@campo_tele,@valor2,@longi),@campo_conf from @tabla where @campo_cedula is not null and @campo_tele is not null
exec (@sentencia_cursor)
open cc(@TABLA_ORIGEN)
select @contador=1 fetch next from cc into @cedula,@cod_area,@numero,@confiabilidad
while (@@fetch_status =0)
BEGIN
select @sentencia_existe= 'select 1 from ' + @tabla_destino + ' where cedula =' + @cedula + ' and cod_area=' + @cod_area + ' and numero=' + @numero
exec @error= @sentencia_existe
if(@error <> 1)
begin
select @sentencia_insert= 'insert ' + @tabla_destino + '(cedula,cod_area,numero,idfuente,confiabilidad,tipo,clase) values(' + @cedula + ',' + @cod_area + ',' + @numero + ',' + @idfuente + ',' + @confiabilidad + ',' + 'case when ' + @cod_area + '=''9'' then ''CEL'' else ''LCL'' end, case when ' + @cod_area + '=''9'' then ''M'' else ''H'' end)'
exec (@sentencia_insert)
end
SELECT @MSG=CONVERT(CHAR(30),@contador)
PRINT @MSG
SELECT @contador=@contador + 1
select @error=0
fetch next from cc into @cedula,@cod_area,@numero,@confiabilidad
END
close cc
deallocate cc
END
De alguna manera no me reconoce a la hora de declarar el cursor el nombre de la tabla, q se compone de "base..tabla" y me gustaria saber porque y como podria solucionarlo
Gracias,
SAludos
Maria Eugenia Paradas
Valora esta pregunta


0