存储过程的参数传递问题

来源:互联网 发布:网络直播违法 编辑:程序博客网 时间:2024/06/12 07:41

--如何将exec执行结果放入变量中?    
   
  declare   @num   int,    
                                @sqls   nvarchar(4000)    
  set   @sqls='select   @a=count(*)   from   tableName   '    
  exec   sp_executesql   @sqls,N'@a   int   output',@num   output    
  select   @num    
   
   
  --------------------------------------------------------------------------------  
   
  动态sql语句基本语法    
  1   :普通SQL语句可以用Exec执行    
   
  eg:       Select   *   from   tableName    
                    Exec('select   *   from   tableName')    
                    Exec   sp_executesql   N'select   *   from   tableName'         --   请注意字符串前一定要加N    
   
  2:字段名,表名,数据库名之类作为变量时,必须用动态SQL    
   
  eg:        
  declare   @fname   varchar(20)    
  set   @fname   =   'FiledName'    
  Select   @fname   from   tableName                             --   错误,不会提示错误,但结果为固定值FiledName,并非所要。    
  Exec('select   '   +   @fname   +   '   from   tableName')           --   请注意   加号前后的   单引号的边上加空格    
   
  当然将字符串改成变量的形式也可    
  declare   @fname   varchar(20)    
  set   @fname   =   'FiledName'   --设置字段名    
   
  declare   @s   varchar(1000)    
  set   @s   =   'select   '   +   @fname   +   '   from   tableName'    
  Exec(@s)                                 --   成功    
  exec   sp_executesql   @s       --   此句会报错    
   
   
   
  declare   @s   Nvarchar(1000)     --   注意此处改为nvarchar(1000)    
  set   @s   =   'select   '   +   @fname   +   '   from   tableName'    
  Exec(@s)                                 --   成功            
  exec   sp_executesql   @s       --   此句正确    
   
  3.   输出参数    
  declare   @num   int,    
                  @sqls   nvarchar(4000)    
  set   @sqls='select   count(*)   from   tableName'    
  exec(@sqls)    
  --如何将exec执行结果放入变量中?    
   
  declare   @num   int,    
                                @sqls   nvarchar(4000)    
  set   @sqls='select   @a=count(*)   from   tableName   '    
  exec   sp_executesql   @sqls,N'@a   int   output',@num   output    
  select   @num    

 

--存储过程的参数调用  
   
  --方法1:用动态SQL语句  
  declare   @s   varchar(1000),@值列表   varchar(1000)  
  set   @值列表=   '''aa'',''bb'',''cc'''  
  set   @s='select   *   from   表名   where   字段   in   ('   +   @值列表   +   ')'  
  print   @s  
  exec   (@s)  
   
  --方法2:使用charindex  
  declare   @值列表   varchar(1000)  
  set   @值列表='aa,bb,cc'  
  select   *   from   表名   where   charindex(','   +   字段   +   ',',','   +   @值列表   +   ',')   >   0

 

原创粉丝点击