Sql 无法使用stuff将100000行导出到变量

Sql 无法使用stuff将100000行导出到变量,sql,sql-server,Sql,Sql Server,我试图在一列中获得100000条记录,但只获得160行。我正在使用它导出到csv。请帮忙 declare @STR_EXPORT_CSV nvarchar(max); SELECT @STR_EXPORT_CSV=STUFF(( SELECT '\r\n"'+f.UniqueId+'","'+ISNULL(f.LastName,'')+'","'+ISNULL(f.Firstname,'')+'","'+CONVERT(VARCHAR(20),ISNULL(f.Age,0))

我试图在一列中获得100000条记录,但只获得160行。我正在使用它导出到csv。请帮忙

     declare @STR_EXPORT_CSV nvarchar(max);
     SELECT @STR_EXPORT_CSV=STUFF(( SELECT '\r\n"'+f.UniqueId+'","'+ISNULL(f.LastName,'')+'","'+ISNULL(f.Firstname,'')+'","'+CONVERT(VARCHAR(20),ISNULL(f.Age,0))+'","'+
 ISNULL(CONVERT(VARCHAR(10),CONVERT(DATE,f.birthdatetime),101) +' '+CONVERT(VARCHAR(5),CONVERT(TIME,f.birthdatetime),108),'')+'","'+
ISNULL(CONVERT(VARCHAR(10),CONVERT(DATE,f.death_datetime),101) +' '+CONVERT(VARCHAR(5),CONVERT(TIME,f.death_datetime),108),'')+'","'+
CONVERT(VARCHAR(20),ISNULL(f.genderName,''))+'","'+ISNULL(f.babyRefNo,'')+'","'+ISNULL(f.PresentAddress,'')+'","'+ISNULL(f.PermanentAddress,'')+'","'+ISNULL(f.vaccinationStatus,'')+'","'+ISNULL(S.Vacc_Desc,'')+'","'+ISNULL(CONVERT(VARCHAR(10),CONVERT(DATE,s.Schedule_Date),101),'')+'","'+ISNULL(CONVERT(VARCHAR(10),CONVERT(DATE,s.Actual_Date),101),'')+'","'+ISNULL(s.Vacc_Status,'')+'"' FROM ##FINAL_VACC_SCR_PATIENTS_EXPORT f 
LEFT JOIN ##VACC_SCR_SAMPLE_CARD_DATA s on S.PatientId=f.patientId
order by RegionName asc, HospitalName asc, birthdatetime desc, uniqueId desc for xml path('')),1,4,'')

SELECT @STR_EXPORT_CSV;

尝试至少在一个
cast
中更改类型,您应该明确地将其转换为
varchar(max)
, 即使您的
变量
被声明为
varchar(max)
您从串联中得到的是一个由
8000个
字符组成的字符串

declare @s varchar(max);

set @s = replicate('a', 10000);
select len(@s) as len_;
--len_
---------
--8000

set @s = replicate(cast('a' as varchar(max)), 10000);
select len(@s) as len_;

--len_
--------
--10000

您如何选择数据?可能是截断数据的某个字符限制。您尝试以这种方式导出到CSV有什么原因吗?不使用结果文件、SSI、导出向导或BCP?有很多导出到CSV的方法更简单,而且可能比这更有效。这是一种现有的功能,其中数据被发送到mvc控制器,在mvc控制器中,数据被导出到CSV时,有一个关于数据相关问题的请求。这种截断是否与复制功能无关,而不是连接?如果将@s与其他任何内容连接起来,则生成的字符串超过8000个字符-例如
declare@s varchar(max)=replicate('a',10000);选择len(@s+'anythis')作为len。同样地,通过使用与OP相同的串联技术,我可以得到一个超过8000个字符的字符串,并尝试将varchar更改为max,但仅得到162行。@GarethD您使用了错误的表达式长度,而截断发生在变量中assignment@Jaymz得到162行时,变量的长度是多少?@sepupic赋值后的长度是276970