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 22-03-2014
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
recuperar tabla temporal creada por procedimiento alamcenado

Buenos dias compañeros , el dia de hoy me surgio una duda, que no se si es posible hacer, tengo un procedimiento almacenado en mssql 2005 , que crea una tabla temporal (#vacioreserve) e inserta alguna informacion, existe alguna manera de regresar los datos almacenados en esa tabla temporal a delphi 7

Código SQL [-]
CREATE TABLE #vacioreserve ( indes int NULL,acode int NULL,snompro varchar(30) NULL, darrivaldate datetime NULL,ddeparturedate datetime NULL,aowner int NULL,   
bconser varchar(10) NULL, scodepro varchar(10)  NULL, scodeloco varchar(10)  NULL,  sdev varchar(5) NULL, numero int null);
 .
 .
 .
 . 
set @vsql = 'set @cursor = CURSOR local FAST_FORWARD   for ' + @vquery + ' open @cursor;'   
exec sys.sp_executesql @vsql ,N'@cursor cursor output' ,@Qry_acode output  
fetch next from @Qry_acode into @acode, @snompro, @numero, @scodedev, @ownercode, @stype , @slocationcode while (@@fetch_status = 0) begin         

select @acoderec=isnull(max(acode),0) from #vacioreserve ;
insert into #vacioreserve (indes ,acode ,snompro ,darrivaldate, ddeparturedate ,aowner ,  
bconser , scodepro, scodeloco ,  sdev , numero)      values (@acode, @acoderec+1, @snompro , @arrival,  @departuredate, @ownercode , 'Y',  @stype  , 
@slocationcode    , @scodedev ,@numero) ;

fetch next from @Qry_acode into @acode, @snompro, @numero, @scodedev, @ownercode, @stype , @slocationcode  end



Código Delphi [-]
sp_generar.close;
 . 
. 
 sp_generar.open;   
select * from #vacioreserve
gracias por cualquier comentario

Última edición por richy08 fecha: 22-03-2014 a las 20:42:04.
Responder Con Cita
  #2  
Antiguo 22-03-2014
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Hola richy08,

Una tabla temporal no se puede recuperar porque es temporal, una vez que se cierra la conexión la tabla temporal se destruye automáticamente.

Crea una tabla auxiliar no temporal y cuando ya no la necesites la destruyes.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #3  
Antiguo 24-03-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Creo recordar que en SQlServer hay dos tipos de tablas temporales; Las que se crean con # y las que se crean con ## (ahora no recuerdo cual de ellas se puede acceder utilizando la misma conexión con la que se ha creado).
Yo creo que si las tablas temporales las creas utilizando la misma conexión con la que has lanzado el Stored Proc es posible que sí puedas acceder a ellas.
Pero en este caso, lo más sencillo es probarlo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 24-03-2014
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
Gracias a los dos por sus respuestas, las tablas temporales que son creadas con "##" son tablas globales y cualquiera aplicacion que cree una conexion puede acceder a ella, en cambio las tablas temporales creadas con "#" solo se pueden acceder desde la mimsma conexion, les cuento un poco mas el probelma, no puedo utilizar una tabla auxiliar para almacenar los datos , por que esos datos crean una grafica de gannt de reservaciones, y esta pantalla es usada por varias personas, al usar una tabla auxiliar se sobreescribirian los datos mostrando errores , y esto que menciona neftali es lo que se me hace mas extraño

Yo creo que si las tablas temporales las creas utilizando la misma conexión con la que has lanzado el Stored Proc es posible que sí puedas acceder a ellas.
Pero en este caso, lo más sencillo es probarlo


por que asi lo hace, el procedimiento almacenado que esta colgado de la misma conexion que le query, primero crea la tabla temporal y luego trato de recuperarla, pero siempre sucede el mismo error, la tabla #reserve no existe o no tiene permisos sobre ella, se me olvido comentar estoy utilizando delphi xe5 y los compnentes de firedac.

mil gracias
Responder Con Cita
  #5  
Antiguo 25-03-2014
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Hola richy08,

Cuando creas una tabla #temporal , sólo la estas creando en tú conexión, desde otro ordenador consultas la tabla que has creado temporalmente y no existe, cada ordenador puede crear la misma tabla temporal que para el otro ordenador no existe, sólo para esa conexión.

Cuando creas una tabla ##temporal, todos los usuarios pueden ver la tabla que has creado, pero cuando tú que has creado la tabla cierras la conexión la tabla temporal se destruye y los demás no pueden ver ya la tabla.

Un saludo
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.

Última edición por olbeup fecha: 25-03-2014 a las 09:10:16.
Responder Con Cita
  #6  
Antiguo 25-03-2014
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
Cita:
Empezado por olbeup Ver Mensaje
Hola richy08,

Cuando creas una tabla #temporal , sólo la estas creando en tú conexión, desde otro ordenador consultas la tabla que has creado temporalmente y no existe, cada ordenador puede crear la misma tabla temporal que para el otro ordenador no existe, sólo para esa conexión.

Cuando creas una tabla ##temporal, todos los usuarios pueden ver la tabla que has creado, pero cuando tú que has creado la tabla cierras la conexión la tabla temporal se destruye y los demás no pueden ver ya la tabla.

Un saludo

Gracias olbeup, estoy totalmente de acuerdo, lo que no entiendo es por que despues de crear la tabla temporal con un procedimiento almacenado, al querer recuperar los datos con un query , la tabla no existe, parece que se destruye al terminar el procedimiento almacenado, en cambio cuando creo la tabla temporal por medio de un query , e intento recuperar los datos por medio de otro query lo hace correctamente , nota uso delphi xe5 y los componentes de firedac


saludos
Responder Con Cita
  #7  
Antiguo 26-03-2014
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Hola richy08,

Cuando creas una tabla (#temporal, ##temporal) por medio de un procedimiento almacenado, ese procedimiento utiliza una conexión interna el cual cuando termina ese procedimiento la tabla o tablas se destruyen, es como una variable dentro de un procedimiento, no puedes acceder a ella por que no existe, solo existía dentro del procedimiento.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #8  
Antiguo 26-03-2014
Avatar de richy08
richy08 richy08 is offline
Miembro
 
Registrado: may 2007
Ubicación: Bucerias, Nayarit Mexico
Posts: 529
Poder: 17
richy08 Va por buen camino
Cita:
Empezado por olbeup Ver Mensaje
Hola richy08,

Cuando creas una tabla (#temporal, ##temporal) por medio de un procedimiento almacenado, ese procedimiento utiliza una conexión interna el cual cuando termina ese procedimiento la tabla o tablas se destruyen, es como una variable dentro de un procedimiento, no puedes acceder a ella por que no existe, solo existía dentro del procedimiento.

Un saludo.
a ok, gracias por el tip olbeup, al final cambie todo y termine trabajando con fdmemtable de firedac,

saludos
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
Limpiar tabla temporal camiz Varios 2 08-04-2013 19:08:24
Relacionar Tabla Temporal con Tabla ADO n03l Conexión con bases de datos 3 18-11-2011 21:31:24
Tabla temporal Perenquen MySQL 2 12-11-2011 06:34:43
Tabla temporal local dfarias Conexión con bases de datos 4 23-08-2007 22:11:12
Crear tabla ADO temporal Barzaugc Conexión con bases de datos 3 15-06-2005 10:13:00


La franja horaria es GMT +2. Ahora son las 14:33:38.


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