2012-08-08 6 views
5

में # टेम्पलेट तालिका के बजाय मैं इसका उपयोग कैसे कर सकता हूं यहां मेरी एसक्यूएल क्वेरी है।एसक्यूएल फ़ंक्शन

CREATE FUNCTION UF_GetOrderProducts 
(
    @OrderId int 
) 
RETURNS VARCHAR(500) 
AS 
BEGIN 
    SELECT Identity(int,1,1) ID, ProductId INTO #Temp FROM OrderProduct WHERE OrderId = @OrderId 

Declare @Id int, 
     @Count int, 
     @LoopCount int, 
     @ProductList VARCHAR(500), 
     @ProductListTemp VARCHAR(500) 

SET @Count = (Select Count(*) From #Temp) 

SET @LoopCount = 1 
SET @ProductList = '' 
WHILE @LoopCount <= @Count 
BEGIN 



    SET @ProductListTemp =(SELECT Name FROM Product WHERE ProductId =(Select ProductId from #Temp Where ID = @LoopCount)) 
     SET @ProductList [email protected] + '<br/>' 
     Set @[email protected] + 1   


END 
DROP TABLE #Temp 

RETURN @ProductList 

END 
GO 

मुझे # टेम्पलेट तालिका में लूप करना है। आपके पास कोई और सुझाव है?

उत्तर

16

temp तालिका के बजाय आप तालिका चर का उपयोग कर सकते हैं।

declare @Temp TABLE (ID int identity, ProductId int) 

insert into @Temp(ProductId) 
select ProductId 
from OrderProduct 
where OrderId = @OrderId 

लेकिन आप लूप के बिना अपने फ़ंक्शन को फिर से लिख सकते हैं।

ऐसा कुछ ऐसा करना चाहिए जो आप चाहते हैं।

create function IF_GetOrderProducts 
(
    @OrderId int 
) 
returns varchar(500) 
as 
begin 
    return 
    (
    select Name+'<br/>' 
    from Product as P 
     inner join OrderProduct as OP 
     on P.ProductId = OP.ProductId 
    where OP.OrderId = @OrderId 
    for xml path(''), type 
    ).value('.', 'varchar(500)') 
end 
संबंधित मुद्दे