5

実際に、SQL Server 2008 でユーザー定義テーブル タイプを作成しました。構造を以下に示します。

関数のパラメーターとして渡していますが、その関数もそのタイプのテーブルタイプを返します。関数でその型の変数を宣言し、それにいくつかのデータを挿入してそのパラメーターを返すときに、問題に直面しています。

テーブル型の構造は次のとおりです。

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

そして、私が作成しようとしている関数は次のとおりです。

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
4

1 に答える 1

4

以下のようにタイプを展開するだけです。
参考までに - T-SQL 関数はユーザー定義のテーブル型を返すことができますか?

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

さらに明確にするために、それは完全に互換性があり、そのテーブルタイプの変数に割り当て可能です。たとえば、SQL Fiddle

declare @t OfferWithSubscription
insert @t
select * from fn_showoffer(1,2,3,@t)
于 2012-09-26T11:21:48.177 に答える