我有一个奇怪的问题。我有一个函数通过连接其他几个字符串来返回一个大的字符串。函数返回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
我不能在代码中完成级联因为存储的proc会提供一份水晶报告。 我使用的数据库是SQL服务器2005年,我假设水晶报告也使用SQL本机客户端来获取数据,请纠正我,如果我错了。 如果我在sql管理工作室中执行函数,我仍然得到一个长度为65536的字符串。 – Nikhil 2010-01-05 10:38:48
奇怪,因为我刚刚尝试了您的代码,并且在SQL Server Management Studio中获得了超过400000的长度。 – 2010-01-05 11:42:23
哇!我一次又一次尝试,但我仍然只得到一串长度为65536. 我试图让“结果到文本”,令人惊讶的是我看到字符串更短。 我想知道它是如何为你工作的。有没有限制长度的设置? – Nikhil 2010-01-05 13:06:57