从函数返回varchar(MAX)返回截断的字符串

时间:2010-01-05 10:13:18

标签: sql-server-2005

我遇到了一个奇怪的问题。我有一个函数,它通过连接其他几个字符串来返回一个大字符串。

在某些情况下,字符串太长而且会被截断。

例如,有一个实例,当一个长度为379999的字符串应该返回时,但我看到的是字符串被截断,长度只有65536.

我确信varchar(MAX)可以容纳一个大于65536的字符串,但我在哪里错了?该功能如下所示。

[UPDATE]

此函数正在多个存储过程中使用,并且水晶报告使用存储过程来显示数据。

[更新结束]

ALTER FUNCTION [dbo].[GetShipContSernText](
@shipContNum numeric(9)) returns Varchar(MAX) begin

declare serns cursor for


select
    serial_number
from
    serial_number_view
where
    ship_cont_num = @shipContNum
    and
    template_id is null

open serns;

declare @text varchar(MAX);
declare @serialNumber nvarchar(50);

fetch next from serns into @serialNumber;

while (@@FETCH_STATUS = 0)
begin
    -- cannot concat a null string.

    if (@text is null)
             set @text = @serialNumber; 
    else
          set @text = @text + N', ' + @serialNumber;
    end 
    fetch next from serns into @serialNumber;
end;

close serns;
deallocate serns;

return @text;
end

3 个答案:

答案 0 :(得分:3)

有没有理由你不能在代码中返回行并连接?

您正在混合varchar和nvarchar。

此外,您需要使用SQL Native Client才能使用varchar(max)作为返回值。

答案 1 :(得分:1)

该函数确实返回超过65536个字符的sting,我使用LEN函数并发现长度要大得多。这是限制长度的网格。现在我需要找到为什么水晶报告截断字符串。 感谢Jonas:)

答案 2 :(得分:1)

Crystal Reports中存在一个错误,它将varchar(max)字段解释为varchar(255)

见这里:http://www.crystalreportsbook.com/Forum/forum_posts.asp?TID=5843&PID=17503