这存储过程错在哪里?tks.

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

create   proc   sp_ring_currentrecords  
  (  
  @currentid   int,  
  @sortid   int,  
  @chords   int,  
  @ringtype   nvarchar(50)  
  )  
  /*  
  -------------------------------------------------------------------------------------------------------------  
  @currentid   当前id号  
  @sortid         类别id  
  @chords         和弦  
  @ringtype     铃声类型  
   
  作用:取出匹配终端的当前记录的前后记录  
  -------------------------------------------------------------------------------------------------------------  
  */  
  as  
   
  declare   @d   int  
  select   @d=object_id(tempdb..#b)  
  if   @d   is   not   null  
  drop   table   #b  
   
  ---------------------  
  declare   @sql   nvarchar(2000)  
  set   @sql=select   min(name_tx)   as   name_tx,a.ring_id     into   #b   from   ring   a   inner   join   ringmime   b   on   a.ring_id=b.ring_id   left   join   mime   c   +  
    on   (b.mime_id=c.mime_id   and   c.chord_nr<=+convert(nvarchar(20),@chords)+)   where   sort_id=+convert(nvarchar(20),@sortid)+   and   mimename_tx   in(+replace(@ringtype,#,+)   +  
    group   by   a.ring_id   order   by   a.ring_id   desc  
  exec(@sql)  
  -----------  
   
  declare   @sqlstr   nvarchar(300)  
  set   @sqlstr=select   *   from(select   top   1   *   from   #b   where   ring_id<+convert(nvarchar(20),@currentid)+     order   by   ring_id   desc)   a   +  
  union   all   select   *   from   (select   top   1   *   from   #b   where   ring_id>+convert(nvarchar(20),@currentid)+   order   by   ring_id)   b  
  exec(@sqlstr)  
   
  drop   table   #b  
  go  
   
  调试时总是  
  invalid   object   name   #b.?  
  我不知道错误原因在哪里?  
  帮忙解决下,谢谢!

· 网友精彩回答:

发表者:libin_ftsafe

临时表   #b   的作用范围只在exec()语句内,离开这个语句,临时表就自动删除了。

发表者:vivianfdlpw

局部临时表只在当前exec作用域内有效,如果要在多个exec中使用临时表,可以用全局临时表

发表者:rivery

同意楼上,要注意每个对象的作用域。  
  除了全局临时表,你也可以把局部临时表定义在动态语句的外边,如果表结构可以确定的话。

发表者:xiaoyuepk

对象的作用范围!

.
处理 SSI 文件时出错
© 2006-2008 All Rights Reserved