Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 从函数返回varchar(MAX)将返回截断的字符串_Sql Server 2005 - Fatal编程技术网

Sql server 2005 从函数返回varchar(MAX)将返回截断的字符串

Sql server 2005 从函数返回varchar(MAX)将返回截断的字符串,sql-server-2005,Sql Server 2005,我有一个奇怪的问题。我有一个函数,它通过连接其他几个字符串来返回一个大字符串 在某些情况下,字符串太长,正在被截断 例如,有一个实例,假设返回一个长度为379999的字符串,但我看到该字符串被截断,长度仅为65536 我确信varchar(MAX)可以容纳大于65536的字符串,但我在这里哪里出错了?功能如下所示 [更新] 此函数在多个存储过程中使用,crystal reports使用这些存储过程来显示数据 [更新完] ALTER FUNCTION [dbo].[GetShipContSernT

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

在某些情况下,字符串太长,正在被截断

例如,有一个实例,假设返回一个长度为379999的字符串,但我看到该字符串被截断,长度仅为65536

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

[更新]

此函数在多个存储过程中使用,crystal reports使用这些存储过程来显示数据

[更新完]

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?