2013-03-21 4 views
0

Я создал скалярную функцию в SQL Server 2008 R2, которая возвращает varchar (4000). Этот varchar (4000) является результатом объединения нескольких строк и нескольких столбцов таблицы. Я буду использовать эту функцию в источнике выбора для отчета. Детали - это продукты с количеством и ценой конкретной продажи.Скалярная функция SQL Server возвращает VARCHAR усечен

Проблема возникает, когда я использую функцию select. Результат усечен. Он должен был вернуть 13 строк и только возвращает 5. Если я использую команду печати в рамках студийной функции управления sql, возвращает 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 
+0

Урезано ли оно при вызове из-за пределов SSMS? Любопытно проверить, что это просто окно результатов, которое усекает его ... –

+0

print dbo.fnReturnProducts ('{25899A98-5E68-E641-8C9D-7F341F17F2EF}') - возвращает 13 строк – user2197049

+0

№ Внутри SSMS и из приложения. Когда я использую select, результат возвращает усеченный. – user2197049

ответ

0

Попробуйте это:

select dbo.fnReturnProducts ('{25899A98-5E68-E641-8C9D-7F341F17F2EF}') into #tablename 
select * from #tablename 
+0

Ваше решение не работает. – user2197049

0

Это не ответ, но результаты от SSMS (и приложения). См. Разницу: только команды печати и выбора. Внутри приложения я использую select (моя проблема).

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

(1) 1.00 - MAC INST PARATI GAL/CAIPIRA 85GR   a $.75 = $.75 
(2) 1.00 - MAC INST PARATI CAR/LEG.85GR    a $.75 = $.75 
(3) 1.00 - MAC INST PARATI GAL/CAIPIRA 85GR   a $.75 = $.75 
(4) 1.00 - TRINK TANGERINA 35GR      a $.69 = $.69 
(5) 1.00 - TRINK TANGERINA 35GR      a $.69 = $.69 
(6) 1.00 - MAC ORSI BAM.OVOS PARAFUSO 500GR   a $1.56 = $1.56 
(7) 1.00 - MAC INST PARATI CAR/LEG.85GR    a $.75 = $.75 
(8) 1.00 - ORSI ACHOC PO 400GR       a $2.16 = $2.16 
(9) 1.00 - ORSI ACHOC PO 400GR       a $2.16 = $2.16 
(10) 1.00 - BISC.PANCO ROSQ NATA 500G     a $3.53 = $3.53 
(11) 1.00 - ST PROTEX ERVA DOCE 90GR     a $1.76 = $1.76 
(12) 1.00 - OLEO SOJA CORCOVADO 900ML    UN a $3.59 = $3.59 
(13) 1.00 - OLEO SOJA CORCOVADO 900ML    UN a $3.59 = $3.59 

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

(1) 1.00 - MAC INST PARATI GAL/CAIPIRA 85GR   a $.75 = $.75 
(2) 1.00 - MAC INST PARATI CAR/LEG.85GR    a $.75 = $.75 
(3) 1.00 - MAC INST PARATI GAL/CAIPIRA 85GR   a $.75 = $.75 
(4) 1.00 - TRINK TANGERINA 35GR     
Смежные вопросы