2010-01-05 64 views
1

我有一个奇怪的问题。我有一个函数通过连接其他几个字符串来返回一个大的字符串。函数返回varchar(MAX)返回截断字符串

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

例如,有一个实例时长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 

回答

0

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

2

是否有一个原因,你不能返回行和代码串联?

你在混合varchar和nvarchar。

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

+0

我不能在代码中完成级联因为存储的proc会提供一份水晶报告。 我使用的数据库是SQL服务器2005年,我假设水晶报告也使用SQL本机客户端来获取数据,请纠正我,如果我错了。 如果我在sql管理工作室中执行函数,我仍然得到一个长度为65536的字符串。 – Nikhil 2010-01-05 10:38:48

+0

奇怪,因为我刚刚尝试了您的代码,并且在SQL Server Management Studio中获得了超过400000的长度。 – 2010-01-05 11:42:23

+0

哇!我一次又一次尝试,但我仍然只得到一串长度为65536. 我试图让“结果到文本”,令人惊讶的是我看到字符串更短。 我想知道它是如何为你工作的。有没有限制长度的设置? – Nikhil 2010-01-05 13:06:57