![]() |
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 ???? |
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! |
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 |
| La zona horaria es GMT -6. Ahora son las 09:53. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.