分享

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

 昵称728549 2010-01-18
楼主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./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./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


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多