Pasar una tabla como parámetro en un procedimiento

Hola
Yo también tengo un problema con los parámetros de tipo tabla. He visto la solución que has dado previamente pero sigo con problemas.
Quiero recorrer los datos de esa tabla recursivamente y una aproximación que he realizado es la siguiente:
          SET @SQLString = 'SELECT * FROM '+@tablaLista
          EXECUTE sp_executesql @SQLString  
          -- esta es la solución que tu propones pero necesito añadirle más:
          SET ROWCOUNT 1
          WHILE EXISTS(SELECT DIRDPD, MCK FROM @tablaLista))
          BEGIN
                    SELECT @DirDPD=DIRDPD, @McKey=MCK FROM @tablaLista
Luego aquí trato las dos variables que obtengo, pero las dos últimas @tablaLista me da error.
Te agradecería mucho si me pudieras ayudar.
Un saludo

1 Respuesta

Respuesta
1
No se lo que estás tratando de hacer, pero yo crearía una tabla tmp como parte del primer sql que ejecutas y luego trabajaría esa tabla tmp que va tener un nombre estático y por lo tanto no es necesario que uses el execute.
El tema con eso es que creo que no va a compilar si la tabla no esta creada, y como es tmp no va a estar hasta que ejecutes el execute(@sql) que cree la tabla.
Yo intentaría por ese lado, si sólo es una cuestión de nombres y las estructuras de las tablas son más o menos iguales.
Crearía una tabla tmp en el código del procedimiento y en el @sql lo que haría es insertar las filas en esa tmp.
Definiría un cursor para recorrer las filas de la tambla tmp.
create table #tabla_tmp ....
select @sql=' select ... into #tabla_tmp FROM '+@TABLA
execute (@sql);
declare c_cursor cursor for select * from #tabla_tmp
open c_cursor
fetch next from c_cursor
into @var1, @var2
while @@fetch_status = 0
...
...
Hola,
Gracias por tu ayuda.
Pero ya he intentado esa opción y me dice que "No se puede tener acceso a tablas temporales desde funciones."
Me parece que la solución va a ser crear una tabla permanente.
Un saludo
¿Tiene qué ser una función o puede ser un procedimiento?
Es muy costoso pero podrías crear una pseudotabla temporal y después borrarla al salir.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas