Principales respuestas
Ejecutar un sp con tablas temporales desde Reporting Service

Pregunta
-
Error en la consulta. El nombre de objeto '#ttemp' no es válido.
Gracias.miércoles, 9 de abril de 2008 12:55
Respuestas
-
- Que version de SSRS usas?
- Crees que puedas postear el codigo del procedimiento?
La forma en Reporting Services captura información sobre la metadata del resultado, es ejecutando el procedimiento con la opcion "set fmtonly on". Esta opcion retorna información sobre la metadata del resultado sin ejecutar el procedimiento. Como la tabla no existe sin ejecutar el procedimiento, entonces no se puede obtener la metadata.
Veamos un ejemplo para reproducir el error.
USE Northwind; GO CREATE PROCEDURE dbo.p1 AS SET NOCOUNT ON; DECLARE @i int; SET @i = 1; IF @i = 1 CREATE TABLE #T (c1 int); SELECT c1 FROM #T; GO SET FMTONLY ON; GO EXEC dbo.p1; SET FMTONLY OFF; GO DROP PROCEDURE dbo.p1; GO Result: Msg 208, Level 16, State 0, Procedure p1, Line 12 Invalid object name '#T'.
Si el procedimiento no demora mucho y no cambia el estado de la base de datos (no insert / update / delete en las tablas permanentes), entonces pudieras usar "set fmtonly off" dentro del procedimiento. Estate seguro del riesgo que corres.
USE Northwind; GO CREATE PROCEDURE dbo.p1 AS SET NOCOUNT ON; SET FMTONLY OFF; DECLARE @i int; SET @i = 1; IF @i = 1 CREATE TABLE #T (c1 int); SELECT c1 FROM #T; GO SET FMTONLY ON; GO EXEC dbo.p1; SET FMTONLY OFF; GO DROP PROCEDURE dbo.p1; GO Result: c1 -------
Este metodo, aunque funciona, no me parece muy prudente.
Otra cosa que puedes hacer es crear el Dataset manualmente.
Cómo agregar, editar o eliminar un campo en la ventana Conjuntos de datos (Diseñador de informes)
http://technet.microsoft.com/es-es/library/ms156295(SQL.90).aspx
AMB- Editado HunchbackMVP martes, 24 de noviembre de 2009 14:13
- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator martes, 28 de diciembre de 2010 19:31
martes, 24 de noviembre de 2009 0:48
Todas las respuestas
-
miércoles, 9 de abril de 2008 13:32Moderador
-
Hola, te comento que el SP si lo ejecuto desde una ventana de consulta funciona correctamente. Es mas tengo otros SP pero sin tablas temporales en ellos y funcionan bien.
El problema lo estoy teniendo cuando intento crear un nuevo informe en Reporting service. No se por que no me reconoce la tabla temporal que se crea en el SP.
Espero haber sido un poco mas claro.
Saludos y gracias.
miércoles, 9 de abril de 2008 14:08 -
Debes cambiar las tablas temporales por variables del tipo tabla, cuando termines con el asistente donde te da el problema, si deseas, puedes volver a dejar tu SP como estaba antes con las tablas temporales.
Saludos.lunes, 23 de noviembre de 2009 22:07 -
- Que version de SSRS usas?
- Crees que puedas postear el codigo del procedimiento?
La forma en Reporting Services captura información sobre la metadata del resultado, es ejecutando el procedimiento con la opcion "set fmtonly on". Esta opcion retorna información sobre la metadata del resultado sin ejecutar el procedimiento. Como la tabla no existe sin ejecutar el procedimiento, entonces no se puede obtener la metadata.
Veamos un ejemplo para reproducir el error.
USE Northwind; GO CREATE PROCEDURE dbo.p1 AS SET NOCOUNT ON; DECLARE @i int; SET @i = 1; IF @i = 1 CREATE TABLE #T (c1 int); SELECT c1 FROM #T; GO SET FMTONLY ON; GO EXEC dbo.p1; SET FMTONLY OFF; GO DROP PROCEDURE dbo.p1; GO Result: Msg 208, Level 16, State 0, Procedure p1, Line 12 Invalid object name '#T'.
Si el procedimiento no demora mucho y no cambia el estado de la base de datos (no insert / update / delete en las tablas permanentes), entonces pudieras usar "set fmtonly off" dentro del procedimiento. Estate seguro del riesgo que corres.
USE Northwind; GO CREATE PROCEDURE dbo.p1 AS SET NOCOUNT ON; SET FMTONLY OFF; DECLARE @i int; SET @i = 1; IF @i = 1 CREATE TABLE #T (c1 int); SELECT c1 FROM #T; GO SET FMTONLY ON; GO EXEC dbo.p1; SET FMTONLY OFF; GO DROP PROCEDURE dbo.p1; GO Result: c1 -------
Este metodo, aunque funciona, no me parece muy prudente.
Otra cosa que puedes hacer es crear el Dataset manualmente.
Cómo agregar, editar o eliminar un campo en la ventana Conjuntos de datos (Diseñador de informes)
http://technet.microsoft.com/es-es/library/ms156295(SQL.90).aspx
AMB- Editado HunchbackMVP martes, 24 de noviembre de 2009 14:13
- Marcado como respuesta Alberto López Grande (qwalgrande)Moderator martes, 28 de diciembre de 2010 19:31
martes, 24 de noviembre de 2009 0:48 -
Hola.Lo que yo haría sería reescribir el procedimiento almacenado para que no use tablas temporales, porque el motivo del error es ese que comenta Alejandro. No sé cómo de complicado será, pero seguro que puede conseguirse. Si quieres, puedes pasarnos el código y te podemos echar una mano con ello.
Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)martes, 24 de noviembre de 2009 8:29Moderador -
- Que version de SSRS usas?
- Crees que puedas postear el codigo del procedimiento?
La forma en Reporting Services captura información sobre la metadata del resultado, es ejecutando el procedimiento con la opcion "set fmtonly on". Esta opcion retorna información sobre la metadata del resultado sin ejecutar el procedimiento. Como la tabla no existe sin ejecutar el procedimiento, entonces no se puede obtener la metadata.
Veamos un ejemplo para reproducir el error.
USE Northwind; GO CREATE PROCEDURE dbo.p1 AS SET NOCOUNT ON; DECLARE @i int; SET @i = 1; IF @i = 1 CREATE TABLE #T (c1 int); SELECT c1 FROM #T; GO SET FMTONLY ON; GO EXEC dbo.p1; SET FMTONLY OFF; GO DROP PROCEDURE dbo.p1; GO Result: Msg 208, Level 16, State 0, Procedure p1, Line 12 Invalid object name '#T'.
Si el procedimiento no demora mucho y no cambia el estado de la base de datos (no insert / update / delete en las tablas permanentes), entonces pudieras usar "set fmtonly off" dentro del procedimiento. Estate seguro del riesgo que corres.
USE Northwind; GO CREATE PROCEDURE dbo.p1 AS SET NOCOUNT ON; SET FMTONLY OFF; DECLARE @i int; SET @i = 1; IF @i = 1 CREATE TABLE #T (c1 int); SELECT c1 FROM #T; GO SET FMTONLY ON; GO EXEC dbo.p1; SET FMTONLY OFF; GO DROP PROCEDURE dbo.p1; GO Result: c1 -------
Este metodo, aunque funciona, no me parece muy prudente.
Otra cosa que puedes hacer es crear el Dataset manualmente.
Cómo agregar, editar o eliminar un campo en la ventana Conjuntos de datos (Diseñador de informes)
http://technet.microsoft.com/es-es/library/ms156295(SQL.90).aspx
AMB
También esta es otra opción, hazlo en el asistente del SSRS.
De esta forma.
http://img230.imageshack.us/img230/9757/problemaconssrsyspconta.jpg
Saludos.- Propuesto como respuesta Ignacio Méndez C viernes, 11 de diciembre de 2009 21:55
martes, 24 de noviembre de 2009 14:59