SQL Server - procedimientos reutilizables

 
Vista:

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:procedimientos reutilizables

Publicado por Isaias (3308 intervenciones) el 29/10/2007 23:10:28
Maria

Deberias utilizar QUERY DINAMICO, aqui un ejemplo

DECLARE @SQLString NVARCHAR(100)
DECLARE @Tabla sysname
SET @Tabla = 'cliente'
SET @SQLString = N'SELECT * FROM '+@Tabla
EXECUTE sp_executesql @SQLString
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar