Tengo un Procedimiento almacenado para Obtener un Folio y es por tabla ( q seria un consecutivo por Año-Mes) q registra en una tabla llamada
 
 Folios
Field Name    Data Type
tabla	     varchar(25)
anio	     tinyint
mes	     tinyint
folio	     smallint
 
El procedimiento almacenado es el siguiente:
 
 CREATE PROCEDURE StpObt_Folio
@pi_Tabla varchar(50),
@po_Folio char(9) OUTPUT
AS
BEGIN
  /* Procedure body */
  declare @vl_Contador as smallint
  declare @vl_Now as smalldatetime
  declare @vl_Anio as smallint
  declare @vl_Mes as smallint
  declare @vl_FolioInt as smallint
 
  /* Obtener Año mes dia de vNow */
  set @vl_now = getdate()
  set @vl_Anio = datepart(yy,@vl_Now)
  set @vl_Mes = datepart(mm,@vl_Now)
  if @vl_Anio > 1999
     set @vl_Anio = @vl_Anio-2000
  else
     set @vl_Anio = @vl_Anio-1900
 
  -- Verifico si hay un folio del mes
  select @vl_Contador=count(*)
  from dbo.folios
  where tabla = @pi_Tabla and
        anio  = @vl_Anio  and
        mes   = @vl_Mes
 
  -- si existe ya el registro del mes correspondiente obtengo el ultimo folio
  if @vl_Contador > 0
    begin
      select @vl_FolioInt = IsNull(folio,5)
      from dbo.folios
      where tabla = @pi_Tabla and
            anio  = @vl_Anio  and
            mes   = @vl_Mes
 
      set @vl_FolioInt = @vl_FolioInt+1
 
      /* Actualizo el ultimo Folio del mes correspondiente*/
      update dbo.folios
         set folio = @vl_FolioInt
      where  tabla = @pi_Tabla and
             anio  = @vl_Anio  and
             mes   = @vl_Mes
 
    end
  else  -- de lo contrario inicio en 1
    begin
      set @vl_FolioInt = 1
 
      /*Inserto registro del primer folio del mes*/
      Insert dbo.folios (tabla, anio, mes, folio)
      values (@pi_Tabla, @vl_Anio, @vl_Mes, @vl_FolioInt)
    end
 
  set @po_Folio = right('00'+cast(@vl_Anio as varchar(2)),2)+
                  right('00'+cast(@vl_Mes as varchar(2)),2)+
                  right('00000'+cast(@vl_FolioInt as varchar(5)),5)
  print (@po_Folio)
END
 
Este procedimiento lo ejecuto y trabaja perfectamente y me regresa el nuevo folio en la variable @po_Folio que es un parametro de salida.
 
cuando lo ejecuto me da lo siguiente.
 Query OK, 1 rows affected (219 ms)
 
Return Code: 0
@po_Folio = '080300037'
 
Pero cuando lo llamo desde otro procedimiento almacenado que es el que voy a usar para insertar el registro con el numero de folio que se genera con el  Stp_ObtFolio este ya no me regresa el valor.
 
este es el StpIns_Aviso
 
CREATE PROCEDURE StpIns_Aviso
@pi_nss char(11),
@pi_nss_ver smallint
AS
BEGIN
  /* Procedure body */
  /*@pi_ = parametros de entrada*/
  /*@po_ = parametros de salida*/
  /*@vl_ = variables locales*/
  declare @vl_miFolio as char(9)
  declare @vl_Folio as char(9)
  declare @po_Folio as char(9)
 
  /* Valido Datos Obligatorios */
  if (@pi_nss     is null or ltrim(rtrim(@pi_nss))='' or
      @pi_nss_ver is null or ltrim(rtrim(@pi_nss_ver))='')
  begin
  /*Creo una excepcion de registro no valido*/
    RAISERROR('Falta NSS y/o Version NSS',14,1)
    RETURN
  end
 
  /*declaracion de variables locales*/
 
  /*Obtengo Numero de Folio*/
 
  exec dbo.StpObt_Folio 'avisos',@vl_folio
 
  /* aqui insertaria en avisos con el folio generado
 
  insert dbo.avisos (folio, nss, nss_ver )
  values(@vl_folio,'11111111111', 1)
*/
  if (@vl_folio is null)
  begin
    RAISERROR('StpObt_Folio me regreso nulo en @vl_Folio',14,1)
  end
 
END
 
Y cuando lo ejecuto me da el siguiente resultado 
 
 
 StpObt_Folio me regreso nulo en @vl_Folio
 
que estoy haciendo mal o eso no se vale ???? 
   
 


