2012-08-08 9 views
5

Oto moje zapytanie sql.Co mogę użyć zamiast tablicy #Temp w funkcji sql

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 

Muszę pętli w tablicy #Temp. Czy masz jakieś inne sugestie?

Odpowiedz

16

Zamiast tabeli temp można użyć zmiennej tabeli.

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

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

Ale możesz napisać swoją funkcję bez pętli.

Coś takiego powinno zrobić, co chcesz.

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 
Powiązane problemy