CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

存储过程这样写到底错在哪里了啊,着急等待。。。

楼主yesjoy(卫卫)2005-12-31 10:38:42 在 MS-SQL Server / 基础类 提问

下面这个存储过程只是想从getTbname存储过程返回的表名中查询其中的数据而已  
  保存时总是说:必须声明变量'tname'  
  CREATE   procedure   testGetTbname  
  @param1   varchar(100),@param2   varchar(100)    
  as  
  declare   @tname   varchar(100)  
  select   *   from   @tname     exec   getTbname     @param1,@param2  
  GO  
   
  被调用的存储过程getTbname如下,该过程返回的是一个表名  
  create   procedure   getTbname  
  @param1   varchar(100),@param2   varchar(100)  
  as  
  select   tname   from   bd_sccjxh   where   tname   in(select   tname   from   bd_sccjxh   where   cjbh=(select   cjbh   from   bd_zzcj   where   cjmc   =   @param1)    
  and   xhbh   in(select   xhbh   from   bd_sccjxh   where   cjbh=(select   cjbh   from   bd_zzcj   where   cjmc   =   @param2))    
  and     xhbh   in(select   xhbh   from   bd_sccjxh   where   cjbh=(select   cjbh   from   bd_zzcj   where   cjmc   =   @param1)))  
  GO  
  问题点数:20、回复次数:7Top

1 楼zhaoanle(zhao)回复于 2005-12-31 10:45:19 得分 1

表名为参数应该要  
  exec('select   *   from   '+   @tname)Top

2 楼newmcz(newmcz)回复于 2005-12-31 10:53:20 得分 1

select   *   from   @tname     exec   getTbname     @param1,@param2  
   
  写法不对,你看看联机帮助,"使用返回代码返回数据"Top

3 楼yesjoy(卫卫)回复于 2005-12-31 10:53:39 得分 0

问题是如何把exec   getTbname     @param1,@param2执行后取得的表名赋值给变量@tname呢Top

4 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-12-31 10:57:14 得分 13

CREATE   procedure   testGetTbname  
  @param1   varchar(100),@param2   varchar(100)    
  as  
  begin  
          declare   @tname   varchar(100)  
   
          create   table   #T(tname   varchar(100))  
          insert   into   #T   exec   getTbname     @param1,@param2  
           
          declare   t_cursor   cursor   for   select   tname   from   #t  
          open   t_cursor  
          fetch   next   from   t_cursor   into   @tname  
   
          while   @@fetch_status=0  
          begin  
                  exec('select   *   from   '+@tname)  
                  fetch   next   from   t_cursor   into   @tname  
          end  
          close   t_cursor  
          deallocate   t_cursor  
  end  
  GOTop

5 楼lsqkeke(可可)回复于 2005-12-31 10:57:46 得分 2

存储过程getTbname返回的是一个记录集,而不是表名!  
   
  select   *   from   @tname     exec   getTbname     @param1,@param2  
   
  改为:select   *   from     (exec   getTbname     @param1,@param2)a  
  Top

6 楼wangtiecheng(不知不为过,不学就是错!)回复于 2005-12-31 11:05:28 得分 3

1、可以使用输出参数  
   
  create   procedure   sp_test    
    (  
          @p1   varchar(100),    
          @p2   varchar(200),    
          @p3   varchar(100)   output  
      )  
  as  
   
  ......  
  set   @p3=...  
  ......  
  go  
   
   
  --调用  
   
  declare   @Para1   varchar(100),   @Para2   varchar(100),   @ParaOut   varchar(100)  
   
  exec   sp_test   @Para1,   @Para2,   @ParaOut   output  
   
  select   @ParaOut     ---可以使用@ParaOut的值  
   
   
  --2、使用存储过程返回的表数据  
   
  create   table   #tp(Tname   varchar(100))  
   
  insert   into   #tp  
  exec   存储过程名   参数列表  
   
   
  select   *   from   #tp       ---#tp中有存储过程返回的数据  
   
  Top

7 楼yesjoy(卫卫)回复于 2005-12-31 11:05:58 得分 0

libin_ftsafe(子陌红尘)真厉害   终于把问题给解决啦   ^_^   真的由衷感谢啊  
  就是要这样的结果啊   结贴啦Top

相关问题

  • 存储过程出错,100分在线等待!
  • 存储过程出错?
  • 存储过程的错误????
  • 存储过程错误
  • 存储过程出错
  • 存储过程出错!
  • 存储过程出错!!急!
  • 存储过程出错!
  • 帮帮忙,看看我的存储过程为什么出错?在线等待
  • ****非常着急****ADO调SQLServer存储过程中的结果级不成功,非常感谢,在线等待****

关键词

  • 存储过程
  • 数据
  • gettbname
  • cjbh
  • tname
  • paraout
  • sccjxh
  • xhbh
  • bd
  • varchar

得分解答快速导航

  • 帖主:yesjoy
  • zhaoanle
  • newmcz
  • libin_ftsafe
  • lsqkeke
  • wangtiecheng

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo