Leer procedimiento almacenado con ADO.

10/11/2003 - 20:54 por Tomás | Informe spam
Hola a todo el grupo.

Tengo un problema que no consigo resolver. Necesito leer los datos de un
procedimiento almacenado que se ejecuta en un servidor SQL Server 2000 que,
después de muchas funciones, me devuelve el resultado guardado en una tabla
temporal de la siguiente forma:

SELECT * FROM #TEMP

Desde mi aplicación en VC++.NET, utilizo ADO, (resumido), de la siguiente
forma:

_ConnectionPtr pConn;
_RecordsetPtr pRset;
_CommandPtr pCommand;
pCommand.CreateInstance(__uuidof(Command));
pCommand->ActiveConnection = pConn;
pCommand->CommandText = "MiProcedimiento";
pCommand->CommandType = adCmdStoredProc;
pRset = pCommand->Execute(NULL,NULL,adCmdStoredProc);

Este conjunto de datos (pRset), no contiene nada cuando regresa de ejecutar
la consulta al procedimiento almacenado.

Sin embargo, si el procedimiento almacenado es un SELECT a una tabla que
exista en la base de datos, funciona perfectamente, este ejemplo funciona:

SELECT * FROM MI_TABLA

El problema que tengo es que necesito hacer muchos trabajos de selección de
muchas tablas, que se resumen en una temporal y luego hacer un solo SELECT
de esta tabla temporal que es la que utilizo en mi aplicación.

¿Alguien sabe como se puede conseguir leer los datos de un procedimiento
almacenado que devuelve los datos de una tabla temporal?.

Gracias por anticipado.

Tomás.

Preguntas similare

Leer las respuestas

#1 Rodrigo Corral González
11/11/2003 - 09:34 | Informe spam
El problema esta en que seguramente estes creando la tabla temporal desde
otra conexión, los objetos temporales nunca tienen mayor tiempo de vida que
la conexión que los crea.

Un saludo
Rodrigo Corral González
Respuesta Responder a este mensaje
#2 Rodrigo Corral González
11/11/2003 - 09:38 | Informe spam
Según los libros en pantalla de Sql Server:

Hay dos tipos de tablas temporales:

a.. Tablas temporales locales
Los nombres de estas tablas empiezan por el signo de número (#). Sólo son
visibles en las conexiones que las crean.

b.. Tablas temporales globales
Los nombres de estas tablas empiezan por dos signos de número (##). Son
visibles en todas las conexiones. Si las tablas no se eliminan
explícitamente antes de que finalice la conexión que las creó, se eliminan
en cuanto las otras tareas que hacen referencia a ellas dejen de hacerlo.
Ninguna tarea nueva puede hacer referencia a una tabla temporal global
después de que finalice la conexión que las creó. La asociación entre una
tarea y una tabla termina siempre al finalizar la ejecución de la
instrucción actual. Por tanto, las tablas temporales globales se eliminan
normalmente poco después de que finalice la conexión que las creó.

Un saludo

Rodrigo Corral González
Respuesta Responder a este mensaje
#3 Tomás
11/11/2003 - 16:32 | Informe spam
Gracias, comprobaré que el problema no venga por ahí.

Un saludo.

Tomás.


"Rodrigo Corral González" escribió en el mensaje
news:
Según los libros en pantalla de Sql Server:

Hay dos tipos de tablas temporales:

a.. Tablas temporales locales
Los nombres de estas tablas empiezan por el signo de número (#). Sólo


son
visibles en las conexiones que las crean.

b.. Tablas temporales globales
Los nombres de estas tablas empiezan por dos signos de número (##). Son
visibles en todas las conexiones. Si las tablas no se eliminan
explícitamente antes de que finalice la conexión que las creó, se eliminan
en cuanto las otras tareas que hacen referencia a ellas dejen de hacerlo.
Ninguna tarea nueva puede hacer referencia a una tabla temporal global
después de que finalice la conexión que las creó. La asociación entre una
tarea y una tabla termina siempre al finalizar la ejecución de la
instrucción actual. Por tanto, las tablas temporales globales se eliminan
normalmente poco después de que finalice la conexión que las creó.

Un saludo

Rodrigo Corral González


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida