动态存储过程(带LIKE)的一些总结!


1  select count(*) from @table) where title like '%'+(@title)+'%'--错误
 
from 子句只能带表名、视图名、表变量,编译器把@tablename   看作表变量,会报变量没有申明的错误。


2  sp_executesql
执行可以多次重用或动态生成的 Transact-SQL 语句或批处理。Transact-SQL 语句或批处理可以包含嵌入参数。

 

3  动态SQL语句的一些常见写法  
   
   
   
   
  3.1:普通SQL语句可以用Exec执行  
   
  eg:       Select   *   from   tableName  
              Exec('select   *   from   tableName')  
              sp_executesql   N'select   *   from   tableName'         --   请注意字符串前一定要加N  
   
  3.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.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  


4  在T-SQL中﹐兩個單綽號''表示一個單引號'  
  如:   select   ''''
得到正确的动态存储过程(带like语句)
CREATE PROCEDURE GetNewsCount
         @table varchar(60),
         @title  varchar(200)
         as
declare @sql varchar(600)
set @sql=' select count(*) from '+rtrim(@table)+' where title like ''%'+(@title)+'%'''
exec (@sql)
  
GO
  

 总结sql基础不牢固!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值