5

Eigentlich habe ich einen benutzerdefinierten Tabellentyp in SQL Server 2008 erstellt. Struktur ist unten angegeben.Wie mache ich eine Funktion, die den benutzerdefinierten Tabellentyp als Parameter akzeptiert und denselben in sql zurückgibt?

Ich übergebe es als Parameter in Funktion und diese Funktion gibt auch diese Art von Tabellentyp zurück. Ich stehe vor dem Problem, während ich eine Variable dieses Typs in Funktion deklariere, einige Daten darin einfüge und diesen Parameter zurückgebe.

Tabellentyp Struktur ist:

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) 
    ) 

Und die Funktion, was ich versuche zu erstellen:

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 

Antwort

4

Sie müssen nur die Art wie unten erweitern müssen.
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 

Und weiter zu verdeutlichen, das ist vollständig kompatibel und belegbare einer Variablen dieser Tabellentyp, z.B. SQL Fiddle

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

Herr Richard, Vielen Dank für schnelle Antwort. Es ist hilfreich für mich .. –

+0

Herr Mahmoud Gamal, es zeigt den Fehler "Muss die skalare Variable" @ReturnTable "deklarieren." –

+0

Haben Sie im Funktionskopf die Zeile 'RETURNS @ReturnTable Table' übersehen? – RichardTheKiwi

Verwandte Themen