我可以在sql函数中使用什么代替#Temp表

时间:2012-08-08 06:04:12

标签: sql-server-2008 tsql temp

这是我的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 +=@ProductListTemp + '<br/>'
       Set @LoopCount=@LoopCount + 1         


END
DROP TABLE #Temp

RETURN @ProductList

END
GO

我必须在#Temp Table中循环。你还有其他建议吗?

1 个答案:

答案 0 :(得分:21)

您可以使用表变量代替临时表。

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
相关问题