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