求各位帮忙看一下,这个返回字符串的存储过程哪儿有问题
存储过程如下,老是调试不成功!!
请问,当通过程序提供@project_bh给SP后,如何取得@s2的返回字符串呢
Create Procedure get_grade
@s2 varchar(600) output,
@project_bh as varchar(10)
AS
Declare @s1 varchar(200),
@count as int
select @count=count(*) from Content_info where project_bh=@project_bh
while @count>0
begin
select @s1=bid_title+'('+bid_bh+');' from Content_info where project_bh=@project_bh
set @count=@count-1
end
SET @s2=@s2+@s1
Return 0
GO
问题点数:100、回复次数:12Top
1 楼zlp321002(Life Is Good,Let's Shine)回复于 2005-10-09 15:01:35 得分 10
--存储过程调用及获取返回值,参考:
http://blog.csdn.net/zlp321002/archive/2005/06/22/400705.aspxTop
2 楼WangZWang(先来)回复于 2005-10-09 15:02:22 得分 10
-- 执行查看结果
declare @s2 varchar(600),
@project_bh as varchar(10)
set @project_bh='?'
exec get_grade @s2 out,@project_bh
select @s2Top
3 楼scmail81(琳·风の狼(修罗))回复于 2005-10-09 15:02:35 得分 10
set @S1=''Top
4 楼rivery(river)回复于 2005-10-09 15:06:27 得分 10
--在sql中调用
declare @project_bh varchar(10),@c varchar(600)
select @project_bh='xxxxx'
exec get_grade @c output,@project_bh
select @cTop
5 楼scmail81(琳·风の狼(修罗))回复于 2005-10-09 15:09:30 得分 10
sorry 看错了Top
6 楼nicemood(冰度咖啡)回复于 2005-10-09 15:28:10 得分 0
返回NULL
是错的....郁闷Top
7 楼nicemood(冰度咖啡)回复于 2005-10-09 15:31:07 得分 0
create Procedure get_grade
@grade varchar(600) output,
@Company_id int
AS
Declare @s1 varchar(200),
@count as int
select @count=count(*) from grade_info where Company_id=@Company_id
while @count>0
begin
select @s1=Grade+';' from grade_info where Company_id=@Company_id
set @count=@count-1
end
SET @grade=@grade+@s1
Return 0
GO
_______________________________________________________________________
declare @grade varchar(600),
@Company_id int
set @Company_id='4'
exec get_grade @grade out,@company_id
select @grade
________________________________________________________________
返回空
_____________________________________________________________
select s1=Grade+';' from grade_info where Company_id=4
s1得出两行值.....
????????????????????????Top
8 楼rivery(river)回复于 2005-10-09 16:00:25 得分 10
--请楼主检查这个是否能满足你的意思。
create Procedure get_grade
@grade varchar(600) output,
@Company_id int
AS
select @grade =''--**************这里增加
select @grade =@grade +';'+Grade from grade_info where Company_id=@Company_id
select @grade=stuff(@grade,1,1,'')
Return
GOTop
9 楼rivery(river)回复于 2005-10-09 16:02:50 得分 10
1。原来的变量没有赋初值,所以是空,和任何字符相加都为空。
2。使用的那个循环得到的是最后一个行的grade值+;,应该不是你的本意。
所以重新修改了过程。Top
10 楼put2006(冷眼螃蟹)回复于 2005-10-09 17:01:52 得分 10
@s2是空的,而且每次select @s1=bid_title+'('+bid_bh+');' 都附同一个值Top
11 楼nicemood(冰度咖啡)回复于 2005-10-10 10:58:33 得分 0
cteate Procedure get_grade
@grade varchar(600) output,
@Company_id int
AS
select @grade =''
Declare @count as int,
@s1 varchar(200)
select @count=count(*) from grade_info where Company_id=@Company_id
while @count>0
begin
select @s1=Grade+';' from grade_info where Company_id=@Company_id
set @count=@count-1
SET @grade=@grade+@s1
end
Return
这个可以执行,并且输出也行,但是输邮始终是第一条记录相连,记录没有循环
GOTop
12 楼rivery(river)回复于 2005-10-10 11:25:42 得分 20
你这样循环是没有意义的。while中的select每次都是相同的值的。
我上面给你改写的那个不行吗?Top




