Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/03/2008, 20:41
norberto_larios
 
Fecha de Ingreso: marzo-2008
Mensajes: 2
Antigüedad: 16 años, 10 meses
Puntos: 0
Procedimiento almacenado Anidado NO ME REGRESA VALOR

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 ????