Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Se puede pasar una tabla a un procedimiento almacenado? (https://www.clubdelphi.com/foros/showthread.php?t=29981)

AFilth 06-02-2006 16:12:48

Se puede pasar una tabla a un procedimiento almacenado?
 
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)

Código SQL [-]
declare @sql varchar (1000)
set @sql='pepe '+char(34)+@nombre_tabla+char(34)
exec (@sql)

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

Código SQL [-]
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.


La franja horaria es GMT +2. Ahora son las 22:27:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi