导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

100分问一个超简单问题 -- 存储过程返回长字符串(>8000)

liulangonline 2007-12-08 04:03:07

-------------------------------------------------------
--建立存储过程
------------------------------------------------------
create procedure myProc(@returnVal nvarchar(4000) output)
as
set @returnVal='...'
go

--------------------------------------------------------
/*
发现问题:
1.当@returnVal的长度很大时,只能得到前面4000个字符.
2.换成varchar(8000)也只有8000个字符,且没有中文的情况下.
3.text类型不能做参数.

目的:
返回长字符串(>8000个字符).

求解决方案,谢谢!
*/
----------------------------------------------------------
...全文
251 点赞 收藏 23
写回复
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuyanxiang 2007-12-09
用ntext 不行吗
回复
whw123456 2007-12-09
路过·~
回复
satanbo 2007-12-09
不太明白
回复
cxmcxm 2007-12-08
用参数不能直接返回,
对长字符串,用表查询返回结果集吧.

回复
liulangonline 2007-12-08
哈哈,爱死你了,E_Sorl
回复
E_Sorl 2007-12-08
楼主用得4个嵌套的游标来写存储过程,相信不是高手也是老手了,给你个提示吧:
定义临时表:
declare #temp(returnVal text)
在循环中将你的 set @returnVal=@returnVal+'...' 改成 insert into #temp(returnVal) values ('...')
最后就select * from #temp 吧,
累加的工作就交给C#吧.
回复
DemonXHunter 2007-12-08
如果是SQL 2005 的话,还可以考虑使用 CLR来写存储过程。
回复
DemonXHunter 2007-12-08
我上面搞错了,运行时出错了。楼主可以考虑使用XP(extended stored procedure)来做
回复
DemonXHunter 2007-12-08
楼主,我的sql 2005 express, 用ntext做类型没有出错啊?
回复
liulangonline 2007-12-08
问题是游标在循环累加时组不成这个长字符串!
对于局部变量,text、ntext 和 image 数据类型无效。
回复
wzy_love_sly 2007-12-08
是05,但我测试完,max不还是8000吗?没看明白
@returnVal nvarchar(4000) output,@returnVal nvarchar(4000) output
写2个不行吗?
回复
elvis_gao 2007-12-08
看来”返回长字符串>8000个字符“的确是个问题,sql server2000 摆渡下也没找到更好的,要不就将字符串转化成数据集返回
回复
liulangonline 2007-12-08
不能,我的存储过程是由4个嵌套的游标组成,返回值是在循环中累加的.
回复
fa_ge 2007-12-08
看来2005功能是更强大了
回复
zhouhaihe 2007-12-08
多个变量返回可以吗?
回复
elvis_gao 2007-12-08
学习了,varchar(max)这个东西还是第一次看到,惭愧
回复
晓风残月0110 2007-12-08
2000 我们测试过,也没有环境
回复
晓风残月0110 2007-12-08
恩,
忘说了,是2005
回复
fa_ge 2007-12-08
2楼用的是sql2005吗?sql2000 怎么不行,我以前也看过别人说 varchar(max),但我试不成功
回复
liulangonline 2007-12-08


-------------------------------------------------------
--建立存储过程
------------------------------------------------------
create procedure myProc(@returnVal nvarchar(4000) output)
as
set @returnVal='...'
go


--------------------------------------------------------
--提出问题
--------------------------------------------------------
/*
发现问题:
1.当@returnVal的长度很大时,只能得到前面4000个字符.
2.换成varchar(8000)也只有8000个字符,且没有中文的情况下.
3.text类型不能做参数.

目的:
返回长字符串(>8000个字符).

求解决方案,谢谢!
*/
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告