PDA

Ver la Versión Completa : Se puede pasar una tabla a un procedimiento almacenado?


AFilth
06-02-2006, 16:12:48
Buenas, pues esa es la pregunta, tengo un procedimiento almacenado q llama a otro procedimiento almacenado. Es posible pasarle a este segundo una variable de tipo tabla igual q se hace con los demas tipos (money, int, varchar...). Si la respuesta es afirmativa como se hace??
Un saludo.

Xianto
07-02-2006, 11:56:43
Puedes pasar un parametro como si fuera un string (varchar)... Lo que pasa es que el procedimiento que reciba este dato tendrá que tener un exec para ejecutar la acción...

Ejemplificando:

Paso un parametro que es un varchar(20)


declare @sql varchar (1000)
set @sql='pepe '+char(34)+@nombre_tabla+char(34)
exec (@sql)


La instrucción de arriba, llamará al siguiente procedimiento...


Create procedure pepe
@tabla varchar(20)
As

declare @sql varchar (1000)
set @sql='insert into '+@tabla+' campo1, campo2, campo3'
set @sql=@sql + ' values valor1, '+@numero+', '+char(34)+getdate()+char(34)

exec (@sql)
GO


Personalmente no me gusta anidar procedimientos... porque si anidas procedimientos muy complejos, tendras que tener un par de super-procesadores.

Porque?

Cuando haces un procedimiento, al ejecutarse por primera vez, el motor MsSql compilará este procedimiento... Cosa que tambien sucede con el método EXECUTE (EXEC), indistintamente se ejecute 1 vez ó 1000, siempre lo compilará !

Saludos !

AFilth
07-02-2006, 13:10:21
Buenas, en primer lugar gracias por responder.

La solución que me das es la única que podía hacer y como lo hacía hasta el momento, pasar en un String el nombre de la tabla y mediante SQL dinámico usarla.

Pero quedaría más elegante poder pasar la tabla directamente, y lo que yo preguntaba era si alguien sabía si era posible ya que tras mirar en la ayuda del SQL y ver algo parecido a lo que pregunto y tras hacer bastantes pruebas no lo he conseguido.

En cuanto a lo que comentas de no anidar procedimientos almacenados no estoy del todo de acuerdo.

Lo primero es q das más modularidad a los procesos q tengas ya q desde un procedimiento almacenado llamas a uno u otro dependiendo de lo q tengas. Además no tienes 100000 de líneas en el mismo con lo q se ve bastante mejor lo q hace ybastante más sencillo revisarlo o cambiarlo.

Un saludo.