PDA

Ver la Versión Completa : Devolver valores en SP


GustavoCruz
07-01-2013, 22:01:51
Buenas tardes amigos del foro,

tengo un procedimiento almacenado en firebird que me calcula la edad completa de una persona. el caso es que para ver los datos simplemente ejecuto esta instrucción:

select * from edadcompleta('12/10/1980')

eso me devuelve 32 años, 0 meses, 25 dias.

he creado un procedimiento en SQL Server 2008
USE [IPSSALUDSOCIAL]
GO
/****** Object: StoredProcedure [dbo].[spEdadCompleta] Script Date: 01/07/2013 15:57:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spEdadCompleta]
@Fecha datetime ,
@Resultado varchar(250) output
AS

declare @a integer;
declare @aa integer;
declare @m integer;
declare @mm integer;
declare @d integer;
declare @dd integer;
declare @anio integer;
declare @mes integer;
declare @dia integer;


SELECT @a = DATEPART(YEAR, @Fecha ),
@m = DATEPART(MONTH, @Fecha),
@d = DATEPART(day, @Fecha),
@aa = DATEPART(year, CURRENT_TIMESTAMP),
@mm = DATEPART(month, CURRENT_TIMESTAMP),
@dd = DATEPART(day, CURRENT_TIMESTAMP),
@anio = @aa - @a;

if (@m <= @mm)
BEGIN
select @mes = @mm - @m;
END
else
begin
select @mes = @mm + 12 - @m;
select @anio = @anio - 1;
end
if (@d <= @dd)
select @dia = @dd - @d;
else
begin
if (@aa % 4 = 0)
select @dia = @dd + 29 - @d;
else
select @dia = @dd + 28 - @d;
select @mes = @mes - 1;
end
if (@mes < 0)
begin
select @anio = @anio - 1;
select @mes = @mes + 12;
end
if (@anio = 1)
select @Resultado = cast(@anio as varchar(4))+' Año, ';
else
select @Resultado = cast(@anio as varchar(4))+' Años, ';

if (@mes = 1)
select @resultado = @resultado+cast(@mes as varchar(2))+' Mes, ';
else
select @Resultado = @Resultado+cast(@mes as varchar(2))+' Meses, ';
if (@dia = 1)
select @Resultado = @Resultado+cast(@dia as varchar(2))+' Día ';
else
select @Resultado = @Resultado+cast(@dia as varchar(2))+' Días ';
GO

mi pregunta es: cómo recupero la edad. Al estilo de firebird.

Gracias de Antemano por vuetra ayuda.


Gustavo Cruz

ContraVeneno
08-01-2013, 02:01:34
No se exactamente a que te refieres con "al estilo firebird", pero seguramente si en lugar de hacer un procedimiento, lo haces como función, vas a poder obtener el valor que estas buscando.

El procedimiento que ya tienes, solo abría que cambiarlo un poco en la sintaxis y estoy seguro que te va a funcionar.

sinalocarlos
08-01-2013, 03:10:52
ContraVeneno esta en lo correcto, por el tipo de procedimiento que estas haciendo deberias intentar con una función de tipo tabla


ALTER FUNCTION dbo.fn_EdadCompleta (@Fecha datetime)
RETURNS @varTable TABLE (Resultado VARCHAR(20) NOT NULL)
AS
BEGIN
--Aqui va tu codigo
INSERT INTO @varTable VALUES (@resultado)

RETURN
END


Asi podrías usarlo como mencionas :

SELECT Resultado FROM fn_EdadCompleta('20130107') Tabla


por cierto, te recomiendo usar un formato yyyymmdd cuando mandes parametros