Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-02-2006
AFilth AFilth is offline
Miembro
 
Registrado: ago 2005
Posts: 119
Poder: 19
AFilth Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 07-02-2006
Avatar de Xianto
Xianto Xianto is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nací en Neuquén (ARG), desde 2001 Spain
Posts: 151
Poder: 20
Xianto Va por buen camino
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 !
__________________
El diseño dira si tiene futuro...
Responder Con Cita
  #3  
Antiguo 07-02-2006
AFilth AFilth is offline
Miembro
 
Registrado: ago 2005
Posts: 119
Poder: 19
AFilth Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Una tabla sólo puede estar unida externamente como máximo a otra tabla ? febito Oracle 0 22-06-2004 18:12:16
Procedimiento Almacenado Ulises Providers 3 30-01-2004 18:14:58
Pasar nombre de tabla en SP __cadetill Firebird e Interbase 4 19-09-2003 19:48:00
Procedimiento almacenado - BDE Ricardo Alfredo Conexión con bases de datos 1 16-06-2003 21:31:34
Pasar punteros a objentos en un procedimiento paldoc Varios 2 09-05-2003 16:39:35


La franja horaria es GMT +2. Ahora son las 01:03:45.


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
Copyright 1996-2007 Club Delphi