-------------------------------------------------------
--建立存储过程
------------------------------------------------------
create procedure myProc(@returnVal nvarchar(4000) output)
as
set @returnVal='...'
go--------------------------------------------------------
/*
发现问题:
1.当@returnVal的长度很大时,只能得到前面4000个字符.
2.换成varchar(8000)也只有8000个字符,且没有中文的情况下.
3.text类型不能做参数.目的:
返回长字符串(>8000个字符).求解决方案,谢谢!
*/
----------------------------------------------------------
varchar(max)-- 测试一普通的varchar
declare @str1 varchar(4001)
declare @str2 varchar(4001)
select @str1 = replicate( '1 ',4001)
select @str2 = replicate( '2 ',4001)
select len(@str1 + @str2) -- 8000
print @str1
print @str2 -- 测试二 max的varchar
declare @str1 varchar(8000)
declare @str2 varchar(8000)
select @str1 = replicate( '1',8000)
select @str2 = replicate( '2',8001)
print len(convert(varchar(max),@str1)+@str2) -- 8002
print len(convert(varchar(max),@str1)) --测试三
declare @str1 varchar(max)
select @str1 = replicate( '1 ',8006)
select len(@str1) -- 8000
--建立存储过程
------------------------------------------------------
create procedure myProc(@returnVal nvarchar(4000) output)
as
set @returnVal='...'
go
--------------------------------------------------------
--提出问题
--------------------------------------------------------
/*
发现问题:
1.当@returnVal的长度很大时,只能得到前面4000个字符.
2.换成varchar(8000)也只有8000个字符,且没有中文的情况下.
3.text类型不能做参数.目的:
返回长字符串(>8000个字符).求解决方案,谢谢!
*/
@returnVal nvarchar(4000) output,@returnVal nvarchar(4000) output
写2个不行吗?
对于局部变量,text、ntext 和 image 数据类型无效。
定义临时表:
declare #temp(returnVal text)
在循环中将你的 set @returnVal=@returnVal+'...' 改成 insert into #temp(returnVal) values ('...')
最后就select * from #temp 吧,
累加的工作就交给C#吧.