存储过程print无法输出结果?

xmychunyucao 2008-04-19 11:44:36
declare @FJ_des varchar(5000)
declare @Des varchar(5000)
declare @SQ_id varchar(200)
declare @pcid int
declare @count int
declare @i int
declare @j int
declare @R_str varchar(10)
declare @SQ_id1 varchar(2)
declare @SQ_id2 varchar(2)
declare @desName varchar(50)
declare @LS_des varchar(5000)
declare @des_count int
declare @SQ_des1 varchar(20)
declare @SQ_des varchar(8000)
declare @SQ_des2 varchar(5000)
declare @bigpic varchar(500)
declare @smallpic1 varchar(500)
declare @smallpic2 varchar(500)
declare @pid int

declare @desTB table
(
id int identity,
pid int,
desName varchar(50),
des varchar(5000)
)

set @pid=32559
select top 1 @pcid=pcid from productList where pid=@pid

if exists(select id from DescriptionSpecialityProduct where pid=@pid)
begin
select @SQ_id=SQ_id,@FJ_des=spDes,@count=SQ_count
from DescriptionSpecialityProduct
where pid=@pid

while @count>=1
begin
set @i=charindex(',',@SQ_id)

set @R_str=left(@SQ_id,@i)

set @j=charindex('-',@R_str)

set @SQ_id1=left(@R_str,@j-1)
--print @SQ_id1
set @SQ_id2=replace(right(@R_str,@i-@j),',','')
--print @SQ_id2

set @SQ_id=right(@sq_id,len(@sq_id)-@i) --replace(@SQ_id,@R_str,'')

set @count=@count-1

set @LS_des='<br>'+(select description from DescriptionProduct where pcid=@pcid and dcid=@SQ_id1 and dcid_id=@SQ_id2)
set @desName=(select DesClassName from DescriptionClassList where dcid=@SQ_id1)
set @Des=(select description from DescriptionProduct where pcid=@pcid and dcid=@SQ_id1 and dcid_id=@SQ_id2)
--print @Des
if exists(select id from @DesTB where desName=@desName)
update @DesTB set des=des+@LS_des where desName=@desName
else
insert @DesTB(pid,desName,des) values(@pid,@desName,@Des)
end
end
--select @Des as des
--select count(*) from @DesTB
set @SQ_des1=''
set @SQ_des2=''
set @SQ_des=''
set @des_count=(select count(*) from @DesTB)
if @des_count<>0
begin
while @des_count>=1
begin
set @SQ_des1=(select desName from @DesTB where id=@des_count)
set @SQ_des2=(select des from @DesTB where id=@des_count)
set @SQ_des='<li>'+@SQ_des2+'</li>'+@SQ_des
set @des_count=@des_count-1
end
print '=========='
print @SQ_des
print '-======='
if @FJ_des is null or @FJ_des=''
set @SQ_des='<ul>'+@SQ_des+'</ul>'
else
set @SQ_des='<ul>'+@SQ_des+'<li>'+@FJ_des+'</li></ul>'

end
else
set @SQ_des='NO'


select pid,productid,pname,model,pmid,psid,stylename,pcid,classname,coid,company,isout,maxOrderNum,@SQ_des as spDes
from V_productlist
where pid=@pid

(1 row(s) affected)


(1 row(s) affected)


(1 row(s) affected)


(1 row(s) affected)


(1 row(s) affected)


(1 row(s) affected)


(1 row(s) affected)


(1 row(s) affected)

==========

-=======

(1 row(s) affected)

为何上下两行=符号都可以输出,@SQ_des变量中的内容不能输出
...全文
1160 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
不会,帮顶
-狙击手- 2008-04-19
  • 打赏
  • 举报
回复 1
print isnull(@SQ_des ,'NULL')
pt1314917 2008-04-19
  • 打赏
  • 举报
回复

---所有涉及到表变量的都要用动态SQL。如下:
--set @des_count=(select count(*) from @DesTB)
--改为:
declare @sql nvarchar(1000)
set @sql='select @c=count(*) from '+@DesTB
exec sp_executesql @sql,N'@c int output',@des_count output




--动态SQL语法:

1:普通SQL语句可以用Exec执行
eg: Select * from tableName
Exec('select * from tableName')
sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N

2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
eg:
declare @fname varchar(20)
set @fname = '[name]'
Select @fname from sysobjects -- 错误
Exec('select ' + @fname + ' from sysobjects') -- 请注意 加号前后的 单引号的边上要加空格
exec sp_executesql N' select ' + @fname + ' from sysobjects'
当然将字符串改成变量的形式也可
declare @s varchar(1000)
set @s = 'select ' + @fname + ' from sysobjects'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错

declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from sysobjects'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确,

3: 输出参数
eg:
declare @num,
@sqls
set @sqls='select count(*) from ' + @servername + '.a.dbo.b'
exec(@sqls)
我如何能将exec执行的结果存入变量@num中

declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from '+@servername+'.a.dbo.b'
exec sp_executesql @sqls,N'@a int output',@num output
select @num



xmychunyucao 2008-04-19
  • 打赏
  • 举报
回复
本地查询分析器中可以输出结果,服务器中把变量放入循环内也可以单个输出,放到循环外就没内容输出?
comszsoft 2008-04-19
  • 打赏
  • 举报
回复
如楼上,如果值为null是不会输出的

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧