Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Recuperar consulta dinámica en una varible sql server

Estas en el tema de Recuperar consulta dinámica en una varible sql server en el foro de SQL Server en Foros del Web. Que tal, saludos a todos, siempre he podido encontrar muy buenas respuestas en este foro por lo que hoy de nuevo recurro a uds., mi ...
  #1 (permalink)  
Antiguo 08/12/2011, 16:04
 
Fecha de Ingreso: octubre-2008
Mensajes: 61
Antigüedad: 15 años, 6 meses
Puntos: 0
Pregunta Recuperar consulta dinámica en una varible sql server

Que tal, saludos a todos, siempre he podido encontrar muy buenas respuestas en este foro por lo que hoy de nuevo recurro a uds., mi caso es el siguiente:

tengo el siguiente store procedure:

alter procedure SP_PRUEBA_SUMA
(
@N1 INT,
@N2 INT,
@RES INT OUTPUT
)
AS
BEGIN
SET @RES =@N1+@N2
END


el cual como podran ver tiene parametros de salida, luego lo mando a llamar en la siguiente consulta dinámica:

SET @N1=1
SET @N2=2
SET @RC='DECLARE @RES int EXECUTE [dbo].[SP_PRUEBA_SUMA]
'+@N1+'
,'+@N2+'
,@RES OUTPUT select @RES'


y ejecuto la consulta así:

EXEC SP_EXECUTESQL @RC

lo cual me da como resultado 3, ahora bien ese 3 es lo que quiero recuperar en una variable de la siguiente forma:

SET @RESULTADO = (EXEC SP_EXECUTESQL @RC)


para que @RESULTADO sea igual a 3

pero el analizador de sintaxis me dice:

Msg 156, Level 15, State 1, Line 15
Incorrect syntax near the keyword 'EXEC'.
Msg 102, Level 15, State 1, Line 15
Incorrect syntax near ')'.



Alguna idea

Nota: no puedo cambiar la forma en la que se ejecuta y se trae el resultado de la consulta dinámica a la variable

Gracias se que puedo contar con su ayuda, saludos
  #2 (permalink)  
Antiguo 08/12/2011, 16:19
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Recuperar consulta dinámica en una varible sql server

Es raro ese uso, pero supongo que es solo un ejemplo..

de cualquier forma lo mejor es ejecutar codigo dinamico a traves del sp sp_executesql, ya que acepta parametros de entrada y salida y ademas se almacena el plan de ejecucion del query solicitado.




este seria un ejemplo de uso..

Código:

DECLARE @nquery NVARCHAR(4000)
       ,@nParams NVARCHAR(4000) 
       
DECLARE @n1 INT, @n2 INT, @res INT

SET @N1=1
SET @N2=2
SET @res = 0
       
SET @nParams = '@n1 INT, @n2 INT, @res INT OUTPUT'       
SET @nquery = ' EXECUTE [dbo].[SP_PRUEBA_SUMA] @N1,@N2, @RES OUTPUT'

EXECUTE sp_executesql @nQuery, @nParams
			  ,@n1 = @N1
			  ,@n2 = @N2
			  ,@RES = @RES OUTPUT 

SELECT @RES
--

Ahora que si de plano no se puede cambiar el query dinamico.. este seria un ejemplo que compila y regresa el resultado como un resultset...

Código:

DECLARE @n1 INT, @n2 INT
DECLARE @query VARCHAR(4000)

SET @N1=1
SET @N2=2

SET @query = 'DECLARE @res INT EXECUTE [dbo].[SP_PRUEBA_SUMA] ' 
           + CAST(@N1 AS VARCHAR) +',' + CAST(@N2 AS VARCHAR) 
           +', @RES OUTPUT SELECT @RES'
           
EXECUTE (@query)


Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Última edición por Andres95; 08/12/2011 a las 16:26
  #3 (permalink)  
Antiguo 08/12/2011, 16:20
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Recuperar consulta dinámica en una varible sql server

Hola Cristo_:

La manera en que estás tratando de recuperar el parámetro de salida no es la correcta, checa la ayuda de sp_executesql:

http://msdn.microsoft.com/es-es/library/ms188001.aspx

ahí busca el siguiente texto:

Cita:
Los parámetros de salida también se pueden utilizar con sp_executesql. En el ejemplo siguiente se recupera un puesto de la tabla
...
...
podría simplemente pegar la respuesta, pero me gustaría que leas un poco y encuentres la solución.

Saludos
Leo.
  #4 (permalink)  
Antiguo 08/12/2011, 16:29
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Recuperar consulta dinámica en una varible sql server

Ups... el compañero Andres95 ya te dio la respuesta, pero de cualquier manera te recomiendo que leas el contenido de la página que te puse...

Saludos
Leo.
  #5 (permalink)  
Antiguo 09/12/2011, 13:48
 
Fecha de Ingreso: octubre-2008
Mensajes: 61
Antigüedad: 15 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Recuperar consulta dinámica en una varible sql server

Así es Andres95, solo era un ejemplo para poder expresar de la manera mas sencilla mi duda, ya que en problema donde lo voy a aplicar es mucho mas complejo. Te agradezco enormemente, tu código fue de gran ayuda , y pues ya me quedo , de igual manera agradezco al resto de los que me hicieron comentarios, publico en otra entrada la solución, saludos.

Cita:
Iniciado por Andres95 Ver Mensaje
Es raro ese uso, pero supongo que es solo un ejemplo..

de cualquier forma lo mejor es ejecutar codigo dinamico a traves del sp sp_executesql, ya que acepta parametros de entrada y salida y ademas se almacena el plan de ejecucion del query solicitado.




este seria un ejemplo de uso..

Código:

DECLARE @nquery NVARCHAR(4000)
       ,@nParams NVARCHAR(4000) 
       
DECLARE @n1 INT, @n2 INT, @res INT

SET @N1=1
SET @N2=2
SET @res = 0
       
SET @nParams = '@n1 INT, @n2 INT, @res INT OUTPUT'       
SET @nquery = ' EXECUTE [dbo].[SP_PRUEBA_SUMA] @N1,@N2, @RES OUTPUT'

EXECUTE sp_executesql @nQuery, @nParams
			  ,@n1 = @N1
			  ,@n2 = @N2
			  ,@RES = @RES OUTPUT 

SELECT @RES
--

Ahora que si de plano no se puede cambiar el query dinamico.. este seria un ejemplo que compila y regresa el resultado como un resultset...

Código:

DECLARE @n1 INT, @n2 INT
DECLARE @query VARCHAR(4000)

SET @N1=1
SET @N2=2

SET @query = 'DECLARE @res INT EXECUTE [dbo].[SP_PRUEBA_SUMA] ' 
           + CAST(@N1 AS VARCHAR) +',' + CAST(@N2 AS VARCHAR) 
           +', @RES OUTPUT SELECT @RES'
           
EXECUTE (@query)


Saludos!
  #6 (permalink)  
Antiguo 09/12/2011, 13:51
 
Fecha de Ingreso: octubre-2008
Mensajes: 61
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Recuperar consulta dinámica en una varible sql server

Bueno pues como les comentaba logre solucionarlo con ayuda de Andres95, para quien en el futuro tenga un problema similar les dejo la solución, saludos.

DECLARE @RC NVARCHAR(2000)
DECLARE @N1 NVARCHAR
DECLARE @N2 NVARCHAR
DECLARE @RESULTADO INT

SET @N1=1
SET @N2=2
SET @RC=' EXECUTE [dbo].[SP_PRUEBA_SUMA]
'+@N1+'
,'+@N2+'
,@RES OUTPUT'

EXEC SP_EXECUTESQL @RC , N'@RES int OUTPUT', @RES=@RESULTADO OUTPUT

SELECT @RESULTADO
  #7 (permalink)  
Antiguo 09/12/2011, 15:47
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Recuperar consulta dinámica en una varible sql server

Cita:
Iniciado por Cristo_ Ver Mensaje
Bueno pues como les comentaba logre solucionarlo con ayuda de Andres95, para quien en el futuro tenga un problema similar les dejo la solución, saludos.

DECLARE @RC NVARCHAR(2000)
DECLARE @N1 NVARCHAR
DECLARE @N2 NVARCHAR
DECLARE @RESULTADO INT

SET @N1=1
SET @N2=2
SET @RC=' EXECUTE [dbo].[SP_PRUEBA_SUMA]
'+@N1+'
,'+@N2+'
,@RES OUTPUT'

EXEC SP_EXECUTESQL @RC , N'@RES int OUTPUT', @RES=@RESULTADO OUTPUT

SELECT @RESULTADO
amigo si hubieras buscado un poquito mas en el foro habrias encontrado la solucion antes de poner tu pregunta ya que esta se ha echo en varias ocasiones :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 12/12/2011, 15:56
 
Fecha de Ingreso: octubre-2008
Mensajes: 61
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Recuperar consulta dinámica en una varible sql server

Cita:
Iniciado por Libras Ver Mensaje
amigo si hubieras buscado un poquito mas en el foro habrias encontrado la solucion antes de poner tu pregunta ya que esta se ha echo en varias ocasiones :)

Saludos!
Pues eso sí, el problema es como buscar , hay mil maneras de referirse al tema y pues la verdad no contaba con mucho tiempo para solucionarlo, saludos.

Etiquetas: sql, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:30.