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

Problema con Stored Procedure

Estas en el tema de Problema con Stored Procedure en el foro de SQL Server en Foros del Web. Amigos, A lo largo de los años he encontrado mucha información que me ha servido en esta gran página. Y ahora que tengo muchos conocimientos ...
  #1 (permalink)  
Antiguo 06/04/2011, 07:24
 
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 12
Antigüedad: 16 años, 9 meses
Puntos: 0
Pregunta Problema con Stored Procedure

Amigos,
A lo largo de los años he encontrado mucha información que me ha servido en esta gran página.
Y ahora que tengo muchos conocimientos me he decidido a aportar y consultar o sea, ser miembro activo de esta comunidad...

Ahora a lo que vine, tengo un Store Proceduce mas o menos así:

Este realiza una consulta a un servidor Linkeado, todo bien hasta ahi. pero el problema está en lo siguiente.

Código:
-- =============================================
-- Author: Wlad
-- Create date: 06/04/2011
-- Description: Procedimiento para consultar a un servidor linkeado y obtener datos de una consulta "control de errores".
--Obtiene ID de un expediente por campo de consulta
-- =============================================
--USE SG_ESCANER_SNA

ALTER PROCEDURE SpRetornaIdExpediente
   
@VALOR VARCHAR(50),
@SQL VARCHAR(8000),
@finalQuery VARCHAR(8000),
@msg AS VARCHAR(100) OUTPUT

AS
BEGIN

    SET NOCOUNT ON;

    Begin Tran Tadd

    Begin Try

SET @SQL = 'SELECT SEP.ID_EXPEDIENTE
 FROM tabla SEP
WHERE SEP.HISTORICO = 1
AND SEP.VALOR = ' + ''''+ '''' + @VALOR+''''+''''

SET @finalQuery = 'SELECT * FROM OPENQUERY(SERVERLINKED,' + '''' + @SQL + '''' + ')'

EXEC(@finalQuery)

        SET @msg = 'Operación realizada correctamente.'

        COMMIT TRAN Tadd

    End try
    Begin Catch

        SET @msg = 'Ocurrio un Error: ' + ERROR_MESSAGE() + ' en la línea ' + CONVERT(NVARCHAR(255), ERROR_LINE() ) + '.'
        Rollback TRAN Tadd

    End Catch

END
GO
Cuando quiero ejecutar el Store Procedure me pide los valores de:
@SQL VARCHAR(8000),
@finalQuery VARCHAR(8000),
@msg AS VARCHAR(100) OUTPUT

la idea es que tome estos valores por los que están seteados en el STProcedure y no tener que ingresarlos para ejecutar el procedimiento.


Código:
USE [SG_ESCANER_SNA]
GO

DECLARE	@return_value int,
		@msg varchar(100)

SELECT	@msg = N'Mensaje retorno'

EXEC	@return_value = [dbo].[SpRetornaIdExpediente]
		@VALOR = N'1944429',
		@SQL = NULL,
		@finalQuery = NULL,
		@msg = @msg OUTPUT

SELECT	@msg as N'@msg'

SELECT	'Return Value' = @return_value

GO
si dejo
@SQLSGPT = NULL,
@finalQuery = NULL,
@msg = @msg OUTPUT
en Null no me retorna datos...

Espero su ayuda!...

Un abrazo.
  #2 (permalink)  
Antiguo 06/04/2011, 07:52
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Problema con Stored Procedure

Código SQL:
Ver original
  1. -- =============================================
  2. -- Author: Wlad
  3. -- Create date: 06/04/2011
  4. -- Description: Procedimiento para consultar a un servidor linkeado y obtener datos de una consulta "control de errores".
  5. --Obtiene ID de un expediente por campo de consulta
  6. -- =============================================
  7. --USE SG_ESCANER_SNA
  8.  
  9. ALTER PROCEDURE SpRetornaIdExpediente
  10. AS
  11. BEGIN
  12.  
  13. DECLARE
  14. @VALOR VARCHAR(50),
  15. @SQL VARCHAR(8000),
  16. @finalQuery VARCHAR(8000),
  17. @msg AS VARCHAR(100) OUTPUT
  18.  
  19.     SET NOCOUNT ON;
  20.  
  21.     BEGIN Tran Tadd
  22.  
  23.     BEGIN Try
  24.  
  25. SET @SQL = 'SELECT SEP.ID_EXPEDIENTE
  26. FROM tabla SEP
  27. WHERE SEP.HISTORICO = 1
  28. AND SEP.VALOR = ' + ''''+ '''' + @VALOR+''''+''''
  29.  
  30. SET @finalQuery = 'SELECT * FROM OPENQUERY(SERVERLINKED,' + '''' + @SQL + '''' + ')'
  31.  
  32. EXEC(@finalQuery)
  33.  
  34.         SET @msg = 'Operación realizada correctamente.'
  35.  
  36.         COMMIT TRAN Tadd
  37.  
  38.     END try
  39.     BEGIN Catch
  40.  
  41.         SET @msg = 'Ocurrio un Error: ' + ERROR_MESSAGE() + ' en la línea ' + CONVERT(NVARCHAR(255), ERROR_LINE() ) + '.'
  42.         ROLLBACK TRAN Tadd
  43.  
  44.     END Catch
  45.  
  46. END
  47. GO

Y porque no lo pones asi en vez de poner tus variables como parametros las declaras dentro de tu procedure :)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 06/04/2011, 07:59
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 4 meses
Puntos: 39
Respuesta: Problema con Stored Procedure

Tienes que asignar un valor por defecto a los parametros de tu SP.
Código SQL:
Ver original
  1. ALTER PROCEDURE SpRetornaIdExpediente
  2.    
  3. @VALOR VARCHAR(50)=NULL,
  4. @SQL VARCHAR(8000)=NULL,
  5. @finalQuery VARCHAR(8000)=NULL,
  6. @msg AS VARCHAR(100) OUTPUT
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #4 (permalink)  
Antiguo 06/04/2011, 10:04
 
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 12
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Problema con Stored Procedure

Muchas gracias... ya está solucionado.

Ahora alguien sabe por que en este código

Código SQL:
Ver original
  1. SET @SQL = 'SELECT SEP.ID_EXPEDIENTE
  2. FROM tabla SEP
  3. WHERE SEP.HISTORICO = 1
  4. AND SEP.VALOR = ' + ''''+ '''' + @VALOR+''''+''''

Son necesarias tantas (') comillas simples???
  #5 (permalink)  
Antiguo 06/04/2011, 10:29
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 5 meses
Puntos: 180
Respuesta: Problema con Stored Procedure

Algunas de tus comitas simples, no lo son, son DOBLE COMITA, ¿porque tantas?, seguramente por eso....
__________________
MCTS Isaias Islas

Etiquetas: sql, stored-procedure
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 23:32.