Sql server 2005 从函数返回varchar(MAX)将返回截断的字符串
我有一个奇怪的问题。我有一个函数,它通过连接其他几个字符串来返回一个大字符串 在某些情况下,字符串太长,正在被截断 例如,有一个实例,假设返回一个长度为379999的字符串,但我看到该字符串被截断,长度仅为65536 我确信varchar(MAX)可以容纳大于65536的字符串,但我在这里哪里出错了?功能如下所示 [更新] 此函数在多个存储过程中使用,crystal reports使用这些存储过程来显示数据 [更新完]Sql server 2005 从函数返回varchar(MAX)将返回截断的字符串,sql-server-2005,Sql Server 2005,我有一个奇怪的问题。我有一个函数,它通过连接其他几个字符串来返回一个大字符串 在某些情况下,字符串太长,正在被截断 例如,有一个实例,假设返回一个长度为379999的字符串,但我看到该字符串被截断,长度仅为65536 我确信varchar(MAX)可以容纳大于65536的字符串,但我在这里哪里出错了?功能如下所示 [更新] 此函数在多个存储过程中使用,crystal reports使用这些存储过程来显示数据 [更新完] ALTER FUNCTION [dbo].[GetShipContSernT
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
有什么原因不能返回行并在代码中连接吗 您正在混合varchar和nvarchar
您还需要使用,以便能够使用varchar(max)作为返回值。该函数返回的字符串确实超过65536个字符,我使用了LEN函数,发现长度要大得多。是网格限制了长度。现在我需要找出为什么crystal report会截断字符串。
感谢Jonas:)Crystal Reports中有一个bug,它将varchar(max)字段解释为varchar(255)
请参见此处:我无法在代码中进行串联,因为存储的进程将提供一个crystal报告。我使用的数据库是sql server 2005,我假设crystal reports也使用sql本机客户端来获取数据,如果我错了,请纠正我。如果我在SQLServerManagementStudio中执行该函数,仍然会得到一个长度为65536的字符串。奇怪,因为我刚刚尝试了您的代码,在SQLServerManagementStudio中得到的长度超过400000。哇!!我试了一次又一次,但仍然只能得到长度为65536的字符串。我试图将“结果转换为文本”,但令人惊讶的是,我发现字符串要短得多。我想知道它是如何为你工作的。是否存在限制长度的任何设置。SSMS在工具>选项>查询结果>结果到文本中有一个设置。它实际上并没有超过65536。您可以尝试通过另一种方法导出数据,这是我的最佳选择。尝试直接导出到文本文件。是否是select len(@text)为您报告65536?