看得眼花,没看完简化你的程序,尽量少用游标,能不用就不用,如下面存储过程就完全可以不用:/*将产品名称串联起来,通过;分隔*/
create proc GetProductName(@tar_id int, @ProName varchar(2000) output)
as
begin
  declare @strTemp varchar(2000)
  select @strTemp = ''
  select @strTemp=@strTemp+';'+hpr_name
    from (select distinct hpr_name from pro_article_product where tar_id=@tar_id) t
  if @proName<>'' 
    select @proName=substring(@strTemp,2,len(@strTemp)-1)
  else
    select @proName=@strTemp
  return 0
end

解决方案 »

  1.   

    不好意思,虽然长,但逻辑很简单,要不请大家先帮我看看:
    http://community.csdn.net/Expert/topic/3646/3646970.xml?temp=.5366327
      

  2.   

    to:pbsql(风云), 麻烦能否帮我看看
    http://community.csdn.net/Expert/topic/3646/3646970.xml?temp=.5366327你给的解决方式,我先看看
      

  3.   

    谢谢pbsql(风云), 我又学了一招
      

  4.   

    这要得分可真够难的
       insert into ArticleInfo(DocID, Title, DateCreate, Hits2004, Hits2003, YearCreate, DisLevel,ProductLine, ProductName,  tTransLation, OriginalID)
       values(@DocID, @Title, @DateCreate,@Hits2004,@Hits2003,@CreateYear,@DisLevel,@ProLine, @ProductName, @Trans, @OriginalID)
    这里的选择列是否是全部?或者是哪一部分?
      

  5.   

    to shouzheng(拾碎℃长江) 
    是ArticleInfo表的部分
      

  6.   

    TO: vinsonshen(猪骨褒咸鱼->味道没得顶) 
    你说的是什么意思啊?
      

  7.   

    我按照风云方法,将开始两个proc中的游标去掉后就可以了。
    难道一个proc中引用了cursor同时这个proc调用了其他两个proc(这两个proc也引用了cursor)
    就会引起cursor混乱?请求风云给解答一下,谢谢
      

  8.   

    不明白么?你试下以下的执行结果就明白了:create table #test (value varchar(10))
    insert #test 
    select 'a'
    union select 'b'
    union select 'c'declare @str varchar(1000)
    set @str=''
    select @str=@str+value+',' from #test
    print @str
      

  9.   

    你明白了上面的话,那你就能把你GetProductName和GetProLine进行大大简化了
      

  10.   

    "难道一个proc中引用了cursor同时这个proc调用了其他两个proc(这两个proc也引用了cursor)
    就会引起cursor混乱?"如果游标名字不一样的话, 那没影响的;若名字一样,若未执行“deallocate 游标名字”,而又创建了个同名字的游标,则会提示游标已存在的
      

  11.   

    看看这个结果,很有意思
    declare 
    @a varchar(2000)
    --这是你给的数据用来测试
    set @a='DesignJet 1050C (E/A0);DesignJet 200 (E/A0 and D/A1);DesignJet 2000CP (E/A0);DesignJet 220 (E/A0 and D/A1);DesignJet 230 (D/A1 and E/A0);DesignJet 250C (D/A1 and E/A0);DesignJet 3000CP (E/A0);DesignJet 330 (D/A1 and E/A0);DesignJet 350C (D/A1 and E/A0);DesignJet 430 printer (D/A1 and E/A0 );DesignJet 450C printer (D/A1 and E/A0);DesignJet 500(24-inch and 42-inch);DesignJet 5000 (42-inch and 60-inch);DesignJet 600 (D/A1 and E/A0);DesignJet 650C (D/A1 and E/A0);DesignJet 650C/B (D/A1 and E/A0);DesignJet 700 (D/A1 and E/A0);DesignJet 700/B (D/A1 and E/A0);DesignJet 750C (D/A1 and E/A0);DesignJet 750C+ (D/A1 and E/A0);DesignJet 750C+/B (D/A1 and E/A0);DesignJet 800(24-inch and 42-inch);DesignJet ColorPro CAD'
    --select返回的长度是有限制的
    select @a
    --print返回的长度和原来一致
    print @a
    create table #test
    (
    b varchar(2000))insert into #test values(@a)select len(b),b from #test
    select len(@a)
    drop table  #test
      

  12.   

    谢谢everyone, 
    to: xlhl(顽皮兔子) 那是因为查询分析器限制显示了,
    option中可以设置