Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/12/2013, 14:42
Jhang
 
Fecha de Ingreso: octubre-2009
Ubicación: Guapiles
Mensajes: 11
Antigüedad: 15 años, 3 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