2012-09-26 16 views
5

En realidad, he creado un tipo de tabla definido por el usuario en el servidor sql 2008. La estructura se da a continuación.¿Cómo hacer una función que tome el tipo de tabla definido por el usuario como parámetro y devolverlo en sql?

Lo estoy pasando como parámetro en la función y esa función también devuelve ese tipo de tipo de tabla. Estoy enfrentando el problema, mientras declaro una variable de ese tipo en función, insertando algunos datos en ella y devolviendo ese parámetro.

estructura de tipo de mesa es:

Create Type OfferWithSubscription as Table           
    (          
    OfferID int, 
    OfferUserID int,          
    OfferImage varchar(200),       
    OfferExactPrice Decimal(18,2),         
    OfferContent varchar(max), 
    OfferTitle varchar(100),          
    StartDate datetime,          
    EndDate datetime,          
    StartTime datetime,          
    StopTime datetime,        
    ShowToUser bit,  
    SubID int,      
    SubLevel varchar(100) 
    ) 

Y la función, lo que estoy tratando de crear es:

CREATE FUNCTION FN_ShowOffer 
( 
    @Gold int, 
    @Silver int, 
    @Bronze int, 
    @table dbo.OfferWithSubscription Readonly) 
RETURNS dbo.OfferWithSubscription 
AS 
BEGIN 

DECLARE @ReturnTable AS dbo.OfferWithSubscription; 
Declare @Case as varchar(20) 
     if(@Gold=0 and @Silver=1 and @Bronze=0) 
      begin 
      set @Case='1S' 
      end 
      if(@Case='1S') 
      Begin 
        insert into @ReturnTable          
        select OfferID, OfferUserID, OfferImage, 
        OfferExactPrice, OfferContent, 
        OfferTitle, StartDate, EndDate, 
        StartTime, StopTime, ShowToUser, 
        SubID, SubLevel 
        from @table 
        where SubID=4 
      End 

RETURN (

@ReturnTable 
) 
END 

Respuesta

4

Usted sólo tiene que ampliar el tipo como el de abajo.
FYI - Can T-SQL function return user-defined table type?

CREATE FUNCTION FN_ShowOffer 
( 
    @Gold int, 
    @Silver int, 
    @Bronze int, 
    @table dbo.OfferWithSubscription Readonly) 
RETURNS @ReturnTable Table           
    (          
    OfferID int, 
    OfferUserID int,          
    OfferImage varchar(200),       
    OfferExactPrice Decimal(18,2),         
    OfferContent varchar(max), 
    OfferTitle varchar(100),          
    StartDate datetime,          
    EndDate datetime,          
    StartTime datetime,          
    StopTime datetime,        
    ShowToUser bit,  
    SubID int,      
    SubLevel varchar(100) 
    ) 
AS 
BEGIN 
Declare @Case as varchar(20) 
     if(@Gold=0 and @Silver=1 and @Bronze=0) 
      begin 
      set @Case='1S' 
      end 
      if(@Case='1S') 
      Begin 
      insert into @ReturnTable          
      select OfferID,OfferUserID,OfferImage,OfferExactPrice,OfferContent,OfferTitle, 
      StartDate,EndDate,StartTime,StopTime,ShowToUser,SubID,SubLevel from @table where SubID=4 
      End 

RETURN 
END 

Y para aclarar aún más, eso es totalmente compatible y asignar a una variable de ese tipo de tabla, por ejemplo, SQL Fiddle

declare @t OfferWithSubscription 
insert @t 
select * from fn_showoffer(1,2,3,@t) 
+0

Sr. Richard, muchas gracias por su rápida respuesta. Es útil para mí ... –

+0

Sr. Mahmoud Gamal, muestra el error que "Debe declarar la variable escalar" @ReturnTable "." –

+0

¿Echas de menos la línea 'RETURNS @ReturnTable Table' en el encabezado de la función? – RichardTheKiwi

Cuestiones relacionadas