5

दरअसल मैंने एसक्यूएल सर्वर 2008 में उपयोगकर्ता परिभाषित तालिका प्रकार बनाया है। संरचना नीचे दी गई है।एक फ़ंक्शन कैसे बनाया जाए जो उपयोगकर्ता परिभाषित तालिका प्रकार को पैरामीटर के रूप में लेता है और SQL में समान रूप से लौटाता है?

मैं इसे फ़ंक्शन में पैरामीटर के रूप में पास कर रहा हूं और यह फ़ंक्शन उस प्रकार के तालिका प्रकार को भी वापस कर देता है। मुझे समस्या का सामना करना पड़ रहा है, जबकि मैं उस प्रकार के एक चर को फ़ंक्शन में घोषित करता हूं, इसमें कुछ डेटा डालता हूं और उस पैरामीटर को वापस करता हूं।

तालिका प्रकार की संरचना होती है:

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

तुम बस नीचे की तरह प्रकार का विस्तार करना होगा।
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 

और आगे स्पष्ट करने के लिए, कि पूरी तरह से संगत और उस तालिका प्रकार के एक चर, जैसे करने के लिए आबंटित है SQL Fiddle

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

श्री रिचर्ड, त्वरित प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। मेरे लिए यह उपयोगी है .. –

+0

श्री महमूद Gamal, यह त्रुटि दिखा रहा है कि "स्केलर वैरिएबल घोषित करना चाहिए" @ReturnTable "।" –

+0

क्या आपने फ़ंक्शन हेडर में 'RETURNS @ReturnTable Table' पंक्ति को याद किया था? – RichardTheKiwi

संबंधित मुद्दे

 संबंधित मुद्दे