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

Procedimiento almacenado Anidado NO ME REGRESA VALOR

Estas en el tema de Procedimiento almacenado Anidado NO ME REGRESA VALOR en el foro de SQL Server en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 16/03/2008, 20:41
 
Fecha de Ingreso: marzo-2008
Mensajes: 2
Antigüedad: 16 años, 2 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 ????
  #2 (permalink)  
Antiguo 17/03/2008, 11:40
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: Procedimiento almacenado Anidado NO ME REGRESA VALOR

En la llamada al SP tienes que especificarle que el parámetro es OutPut, con lo que la llamada quedaría así

exec dbo.StpObt_Folio 'avisos', @vl_folio OutPut

Pruebalo y nos dices!

saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
  #3 (permalink)  
Antiguo 17/03/2008, 15:10
 
Fecha de Ingreso: marzo-2008
Mensajes: 2
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Procedimiento almacenado Anidado NO ME REGRESA VALOR

Si Me Di Cuenta Exactamente Despues De Enviar El Mensaje, Que Me Faltaba El Output En La Llamada Al Procedimiento.

Muchisimas Gracias, Compruebo Q Muchas Cabezas Resuelven Mas Q Una
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 15:16.