当前位置:首页 » 业界相关

请问存储过程中表名怎么样用变量来替代??

 Advertisement:

热门软件下载:


if   object_id(dbo.c_dq)   is   not   null  
  drop   procedure   dbo.c_dq  
  go  
   
  create   procedure   dbo.c_dq  
  @ssdq   varchar(20)   =   null  
  as  
  declare   @mydq   nvarchar(20)  
  declare   @temp_tabname   nvarchar(1000)  
  declare   @temp_msdm   nvarchar(20)  
  declare   @exec_str   nvarchar(2000)  
  deallocate     dq_cursor  
  declare   dq_cursor   scroll   cursor   for   select   msdm   from   hcszhmc   where   lsdq=tb  
  open   dq_cursor  
  fetch   first   from   dq_cursor   into   @temp_msdm  
  if   @@fetch_status=0  
  begin  
  declare   @temp_datas   table  
  (id   bigint   identity(1,1)   not   null,  
  lsdq   nvarchar(20)   not   null,  
  msdm   nvarchar(20)   not   null,  
  rq   smalldatetime   not   null,  
  je   money   default(0))  
   
  while   @@fetch_status   =0  
  begin  
  fetch   next   from   dq_cursor   into   @temp_msdm  
  set     @temp_tabname=rtrim(@temp_msdm)+..hrc21  
  insert   @temp_datas   (lsdq,msdm,rq,je)   select   @ssdq,ddm,rq,je   from   @temp_tabname  
  end  
  end  
  else  
  print   .............................  
  close   dq_cursor  
  deallocate     dq_cursor  
  select   *   from   @temp_datas  
  go  
   
  /*********************  
  insert   @temp_datas   (lsdq,msdm,rq,je)   select   @ssdq,ddm,rq,je   from   @temp_tabname  
  出错:  
  服务器:   消息   137,级别   15,状态   2,过程   c_dq,行   27  
  必须声明变量   @temp_tabname。  
   
  @temp_tabname若变成temp_tabname则存储过程可以被建立,当然执行的时候会出错,因为库中没有此表...:(  
   
  @temp_datas是存储过程中建立的临时存储记录集...  
   
  若我改成exec   insert   +@temp_datas+   (lsdq,msdm,rq,je)   select   +@ssdq+,ddm,rq,je   from   +@temp_tabname  
  则出现如下错误:  
  服务器:   消息   137,级别   15,状态   2,过程   c_dq,行   26  
  必须声明变量   @temp_datas。  
   
  刚开始学存储过程...这个问题怎么解决呢?  
  需要建多个过程吗?

推荐阅读

  • 05年全球20大半导体厂商排名出炉命运各异 [详细内容]
  • 蔡司王牌85f1.4难产 索尼用户苦等到来 [详细内容]
  • 对05,09,11版的一些说明和比较 [详细内容]
  • 杭州电子协会接受慧聪网的采访 [详细内容]
  • 吴仪会见索尼CEO 索尼为修形象卖一件产品捐10元 [详细内容]
  • LG C910管窥 [详细内容]
  • 慧聪网电子行业就是在这里为您呈上精彩直播专题 [详细内容]
  • 网友回答:
    网友:caiyunxia

    exec   (insert   +   @temp_datas     +   (lsdq,msdm,rq,je)   select   +   @ssdq   +,ddm,rq,je   from     +@temp_tabname)  
      用动态sql  
     

    网友:firetoucher

    up  
      用动态sql语句,

    网友:crazyfor

    表名不能使用变量.  
       
      用动态sql,如   caiyunxia(monkey)   所说那样.

    网友:pengdali

    if   object_id(dbo.c_dq)   is   not   null  
      drop   procedure   dbo.c_dq  
      go  
       
      create   procedure   dbo.c_dq  
      @ssdq   varchar(20)   =   null  
      as  
      declare   @mydq   nvarchar(20)  
      declare   @temp_tabname   nvarchar(1000)  
      declare   @temp_msdm   nvarchar(20)  
      declare   @exec_str   nvarchar(2000)  
      deallocate     dq_cursor  
      declare   dq_cursor   scroll   cursor   for   select   msdm   from   hcszhmc   where   lsdq=tb  
      open   dq_cursor  
      fetch   first   from   dq_cursor   into   @temp_msdm  
      if   @@fetch_status=0  
      begin  
      create   table   #temp_datas  
      (id   bigint   identity(1,1)   not   null,  
      lsdq   nvarchar(20)   not   null,  
      msdm   nvarchar(20)   not   null,  
      rq   smalldatetime   not   null,  
      je   money   default(0))  
       
      while   @@fetch_status   =0  
      begin  
      fetch   next   from   dq_cursor   into   @temp_msdm  
      set     @temp_tabname=rtrim(@temp_msdm)+..hrc21  
      exec(insert   #temp_datas   (lsdq,msdm,rq,je)   select   +@ssdq+,ddm,rq,je   from   +@temp_tabname)  
      end  
      end  
      else  
      print   .............................  
      close   dq_cursor  
      deallocate     dq_cursor  
      select   *   from   #temp_datas  
      go

    .  

    相关评论

    Login