Я создал скалярную функцию в 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
Урезано ли оно при вызове из-за пределов SSMS? Любопытно проверить, что это просто окно результатов, которое усекает его ... –
print dbo.fnReturnProducts ('{25899A98-5E68-E641-8C9D-7F341F17F2EF}') - возвращает 13 строк – user2197049
№ Внутри SSMS и из приложения. Когда я использую select, результат возвращает усеченный. – user2197049