【问题标题】:What can I use instead of #Temp table in sql function我可以用什么代替 sql 函数中的#Temp 表
【发布时间】:2012-08-05 05:02:11
【问题描述】:

这是我的 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 表中循环。您还有其他建议吗?

【问题讨论】:

    标签: sql-server-2008 tsql temp


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      相关资源
      最近更新 更多