0

varchar (4000) を返す SQL Server 2008 R2 でスカラー関数を作成しました。この varchar (4000) は、テーブルの複数の行と複数の列を連結した結果です。この関数は、レポートの選択ソースで使用します。詳細は、特定の販売の数量と価格を持つ製品です。

選択機能を使用すると問題が発生します。結果は切り捨てられます。彼は 13 行を返すことになっていて、5 行だけを返します。sql management studio 関数内で print コマンドを使用すると、13 行が返されます。

関数が正しい行数を返すにはどうすればよいですか?

print dbo.fnReturnProducts ('{25899A98-5E68-E641-8C9D-7F341F17F2EF}')  -- returns 13 lines
select dbo.fnReturnProducts ('{25899A98-5E68-E641-8C9D-7F341F17F2EF}') -- returns 5 lines

alter function [dbo].[fnReturnProducts](@OrderId uniqueidentifier) returns varchar(4000)
begin 

declare @Products as varchar(4000)
declare @ProductName as varchar(43)
declare @ProductOrder as varchar(3)
declare @Quantity varchar(30)
declare @UnitPrice varchar(30)
declare @TotalPrice varchar(30)

select @Products = ''

DECLARE aux_cursor CURSOR FOR 
select
    ProductName as ProductName,
    dbo.FormatNumber (ProductOrder, 0, '(', 0) as ProductOrder,
    dbo.FormatNumber (Quantity, 2, '', 0) as Quantity,
    dbo.FormatNumber (UnitPrice , 2, '$', 0) as UnitPrice,
    dbo.FormatNumber (Quantity * UnitPrice, 2, '$', 0) as TotalPrice    
from    vwOrderDetails
Where OrderId = @OrderId
order BY vwOrderDetails.ProductOrder


OPEN aux_cursor
FETCH NEXT FROM aux_cursor 
INTO 
    @ProductName,
    @ProductOrder,
    @Quantity,
    @UnitPrice,
    @TotalPrice


WHILE @@FETCH_STATUS = 0
BEGIN
    if len(@Products) > 0 
    begin
        select @Products = @Products + char(10)
    end 
    select @Products = @Products +  '(' + @ProductOrder + ') ' + @Quantity + ' - ' + @ProductName  + ' a ' + @UnitPrice + ' = ' + @TotalPrice

   FETCH NEXT FROM aux_cursor 
   INTO 
    @ProductName,
    @ProductOrder,
    @Quantity,
    @UnitPrice,
    @TotalPrice

END

CLOSE aux_cursor
DEALLOCATE aux_cursor

RETURN @Products

end


go
4

2 に答える 2

0

これを試して:

select dbo.fnReturnProducts ('{25899A98-5E68-E641-8C9D-7F341F17F2EF}')  into #tablename
select * from #tablename
于 2013-03-21T22:15:47.193 に答える