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

Obtener valor de procedimiento, invocado desde otro

Estas en el tema de Obtener valor de procedimiento, invocado desde otro en el foro de SQL Server en Foros del Web. hola gente, He estado tratando de obtener el valor de retorno de un procedimiento y almacenarlo en una variable del procedimiento que lo invoca, pero ...
  #1 (permalink)  
Antiguo 06/12/2013, 14:42
 
Fecha de Ingreso: octubre-2009
Ubicación: Guapiles
Mensajes: 11
Antigüedad: 14 años, 7 meses
Puntos: 0
Obtener valor de procedimiento, invocado desde otro

hola gente,

He estado tratando de obtener el valor de retorno de un procedimiento y almacenarlo en una variable del procedimiento que lo invoca, pero no lo he conseguido, siempre obteniendo null, mas el procedimiento si retorna la cadena.

El procedimiento es el siguiente:

Código SQL:
Ver original
  1. @pCARACTER          VARCHAR(1),
  2.     @pSTRING            VARCHAR(MAX),
  3.     @pSTRING_RETORNO    VARCHAR(MAX) OUTPUT
  4. AS
  5.  
  6.     DECLARE @TABLA_DATOS    AS TABLE (DATO VARCHAR(MAX));
  7.     DECLARE @DATO_ACTUAL    VARCHAR(MAX);
  8.     DECLARE @DATOS_FINALES  VARCHAR(MAX);
  9.     DECLARE @EXISTE_DATO    INT;
  10.  
  11. BEGIN
  12.  
  13.     SET @DATO_ACTUAL    = '';
  14.     SET @DATOS_FINALES  = '';
  15.     SET @EXISTE_DATO    = 0;
  16.  
  17.     WHILE (LEN(@pSTRING) > 0)
  18.     BEGIN
  19.         SELECT @DATO_ACTUAL = SUBSTRING(@pSTRING, 1, CHARINDEX(@pCARACTER, @pSTRING) - 1);
  20.  
  21.         SET @pSTRING = SUBSTRING(@pSTRING, CHARINDEX(@pCARACTER, @pSTRING) + 1, LEN(@pSTRING));
  22.  
  23.         SELECT  @EXISTE_DATO = COUNT(*)
  24.         FROM    @TABLA_DATOS
  25.         WHERE   DATO = @DATO_ACTUAL;
  26.  
  27.         IF (@EXISTE_DATO = 0)
  28.         BEGIN
  29.             INSERT INTO @TABLA_DATOS (DATO) VALUES (@DATO_ACTUAL);
  30.         END
  31.  
  32.     END
  33.  
  34.     SET @DATOS_FINALES = '';
  35.     SET @pCARACTER = @pCARACTER + ' ';
  36.  
  37.     SELECT  @DATOS_FINALES = COALESCE(@DATOS_FINALES + @pCARACTER, '') + DATO
  38.     FROM    @TABLA_DATOS;
  39.  
  40.     SELECT @DATOS_FINALES = LTRIM(RTRIM(SUBSTRING(@DATOS_FINALES,2,LEN(@DATOS_FINALES))));

Al momento de invocarlo lo intento así:

Código SQL:
Ver original
  1. DECLARE @CADENA_FINAL VARCHAR(MAX)
  2.  
  3. EXEC PR_PROCEDIMIENTO
  4.         @pCARACTER = ',',
  5.         @pSTRING = 'VALOR1,VALOR2,VALOR3,',
  6.         @pSTRING_RETORNO = @CADENA_FINAL OUTPUT
  7.  
  8. SELECT @CADENA_FINAL AS STRING_RETORNO

o así:

Código SQL:
Ver original
  1. DECLARE @QUERY      NVARCHAR(500)
  2. DECLARE @PARAMETROS NVARCHAR(500)
  3. DECLARE @CARACTER       VARCHAR(1)
  4. DECLARE @STRING         VARCHAR(MAX)
  5. DECLARE @STRING_RETORNO VARCHAR(MAX)
  6.  
  7. SET @CARACTER = ','
  8. SET @STRING = 'VALOR1,VALOR2,VALOR3,'
  9. SET @QUERY      = N'EXEC PR_PROCEDIMIENTO @pCARACTER, @pSTRING, @pSTRING_RETORNO OUTPUT'
  10. SET @PARAMETROS = N'@pCARACTER VARCHAR(1), @pSTRING VARCHAR(MAX), @pSTRING_RETORNO VARCHAR(MAX) OUTPUT'
  11.  
  12. EXECUTE sp_executesql
  13.     @QUERY,
  14.     @PARAMETROS,
  15.     @pCARACTER       = @CARACTER,
  16.     @pSTRING         = @STRING,
  17.     @pSTRING_RETORNO = @STRING_RETORNO OUTPUT
  18.  
  19. SELECT @STRING_RETORNO AS "RETORNO"

Siempre me retorna "null" la variable. En el momento de asignación lo estoy haciendo mal?

Espero me puedan ayudar. Gracias
  #2 (permalink)  
Antiguo 06/12/2013, 14:52
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: Obtener valor de procedimiento, invocado desde otro

setea tu variable con '' antes de hacer la invocacion al procedure algo como esto:

Código SQL:
Ver original
  1. DECLARE @CADENA_FINAL VARCHAR(MAX)
  2.  
  3. SET @CADENA_FINAL=''
  4. EXEC PR_PROCEDIMIENTO
  5.         @pCARACTER = ',',
  6.         @pSTRING = 'VALOR1,VALOR2,VALOR3,',
  7.         @pSTRING_RETORNO = @CADENA_FINAL OUTPUT
  8.  
  9. SELECT @CADENA_FINAL AS STRING_RETORNO

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/12/2013, 16:02
 
Fecha de Ingreso: octubre-2009
Ubicación: Guapiles
Mensajes: 11
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Obtener valor de procedimiento, invocado desde otro

hola, gracias por tu respuesta.

No me sirve así tampoco, me retorna un '' (vacío) seteando la variable al inicio
  #4 (permalink)  
Antiguo 06/12/2013, 16:07
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: Obtener valor de procedimiento, invocado desde otro

y el procedure retorna algun valor?? ya probaste que tu codigo regrese algo?? prueba poniendo que retorne una cadena fija..

ya vi donde tienes el error:

Código SQL:
Ver original
  1. @pCARACTER          VARCHAR(1),
  2.     @pSTRING            VARCHAR(MAX),
  3.     @pSTRING_RETORNO    VARCHAR(MAX) OUTPUT
  4. AS
  5.  
  6.     DECLARE @TABLA_DATOS    AS TABLE (DATO VARCHAR(MAX));
  7.     DECLARE @DATO_ACTUAL    VARCHAR(MAX);
  8.     DECLARE @DATOS_FINALES  VARCHAR(MAX);
  9.     DECLARE @EXISTE_DATO    INT;
  10.  
  11. BEGIN
  12.  
  13.     SET @DATO_ACTUAL    = '';
  14.     SET @DATOS_FINALES  = '';
  15.     SET @EXISTE_DATO    = 0;
  16.  
  17.     WHILE (LEN(@pSTRING) > 0)
  18.     BEGIN
  19.         SELECT @DATO_ACTUAL = SUBSTRING(@pSTRING, 1, CHARINDEX(@pCARACTER, @pSTRING) - 1);
  20.  
  21.         SET @pSTRING = SUBSTRING(@pSTRING, CHARINDEX(@pCARACTER, @pSTRING) + 1, LEN(@pSTRING));
  22.  
  23.         SELECT  @EXISTE_DATO = COUNT(*)
  24.         FROM    @TABLA_DATOS
  25.         WHERE   DATO = @DATO_ACTUAL;
  26.  
  27.         IF (@EXISTE_DATO = 0)
  28.         BEGIN
  29.             INSERT INTO @TABLA_DATOS (DATO) VALUES (@DATO_ACTUAL);
  30.         END
  31.  
  32.     END
  33.  
  34.     SET @DATOS_FINALES = '';
  35.     SET @pCARACTER = @pCARACTER + ' ';
  36.  
  37.     SELECT  @DATOS_FINALES = COALESCE(@DATOS_FINALES + @pCARACTER, '') + DATO
  38.     FROM    @TABLA_DATOS;
  39.  
  40.     SELECT @DATOS_FINALES = LTRIM(RTRIM(SUBSTRING(@DATOS_FINALES,2,LEN(@DATOS_FINALES))));
  41.     SET @pSTRING_RETORNO=@DATOS_FINALES

prueba con esta modificacion y comentas :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 06/12/2013 a las 16:28

Etiquetas: procedimiento, select, tabla, valor
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 04:53.