Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Devolver valores en SP (https://www.clubdelphi.com/foros/showthread.php?t=81950)

GustavoCruz 07-01-2013 22:01:51

Devolver valores en SP
 
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:

Código SQL [-]
select * from edadcompleta('12/10/1980')

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

he creado un procedimiento en SQL Server 2008
Código SQL [-]
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

Código SQL [-]
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 :

Código SQL [-]
SELECT Resultado FROM fn_EdadCompleta('20130107') Tabla


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


La franja horaria es GMT +2. Ahora son las 06:11:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi