钢筋如何下料:存储过程中如何用表名作为输入参数?动态SQL语句的一些常见写法

来源:百度文库 编辑:偶看新闻 时间:2024/05/05 20:34:00

存储过程中如何用表名作为输入参数?

楼主wgj0122()2005-01-18 00:55:02 在 MS-SQL Server / 基础类 提问

我想将存储过程中要使用的表名作为存储过程的输入参数,能做到嘛?  
  各位大侠帮忙啊  
  最好能有个完整的小例子! 问题点数:20、回复次数:4Top

1 楼pilicat(Delphi迷)回复于 2005-01-18 01:31:13 得分 5

这样就可以了:  
   
  create   procedure   aProc  
      @TableName   Varchar(30)  
  as  
  declare   @SQLStr   nvarchar(2000)  
  begin  
      set   @SQLStr=N'select   Count(*)   as   [表'+@TableName+'的总记录数为]   from   '+@TableName  
      Execute   sp_executesql   @SQLStr  
  end  
   
   
  大量电脑书籍下载:  
  http://www.netyi.net/in.asp?id=ForMoreU  
   
  Top

2 楼pilicat(Delphi迷)回复于 2005-01-18 01:33:11 得分 5

这样就可以了:  
   
  create   procedure   aProc  
      @TableName   Varchar(30)  
  as  
  declare   @SQLStr   nvarchar(2000)  
  begin  
      set   @SQLStr=N'select   Count(*)   as   [表'+@TableName+'的总记录数为]   from   '+@TableName  
      Execute   sp_executesql   @SQLStr  
  end  
   
   
  调用时这样:  
  aProc   '表名'  
   
  大量电脑书籍下载:  
  http://www.netyi.net/in.asp?id=ForMoreU  
   
  Top

3 楼NinGoo(http://www.NinGoo.net)回复于 2005-01-18 08:50:31 得分 10

动态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  
   
   
  Top

4 楼wgj0122()回复于 2005-01-18 15:49:28 得分 0

多谢两位!Top

相关问题

  • ******奇怪存储过程---参数输入&临时表*******救命啊~~~~~~~~~
  • 想把表名作为存储过程的输入参数,怎么办?
  • 使用存储过程,如何将输入参数转化相应的表?
  • 存储过程以某表名称作为输入参数,如何在存储过程内的游标所用的select语句中使用此表名?
  • 存储过程以某表名称作为输入参数,如何在存储过程内的游标所用的select语句中使用此表名?
  • 我要建立一个存储过程,三个输入参数a,b,c,然后存入表tbl中,怎么写?
  • 我想将表名也作为输入参数,怎样改这个存储过程才行?
  • 江湖就急!!将表名作为存储过程的输入参数,在过程内部使用,错误!!!
  • 如何用command调用存储过程(输入、输出参数)?
  • 请教调用存储过程,输入参数的错误。