绑定变量 存储过程

绑定变量是为了减少解析的,比如你有个语句这样
select aaa,bbb from ccc where ddd=eee;
如果经常通过改变eee这个谓词赋值来查询,像如下
select aaa,bbb from ccc where ddd=fff;
select aaa,bbb from ccc where ddd=ggg;
select aaa,bbb from ccc where ddd=hhh;
每条语句都要被数据库解析一次,这样比较浪费资源,如果把eee换成“:1”这样的绑定变量形式,无论ddd后面是什么值,都不需要重复解析
如果你用数据仓库,一条大查询一跑几个小时,根本没必要做绑定变量,因为解析的消耗微乎其微,而且绑定变量对优化器判断执行路径也有负面影响。
 
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。
用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
  CREATE PROCEDURE order_tot_amt   @o_id int,   @p_tot int output   AS   SELECT @p_tot = sum(Unitprice*Quantity)   FROM orderdetails   WHERE ordered=@o_id  
 例子: 
  表book的内容如下 
  编号 书名 价格 
   001 C语言入门 $30 
   002 PowerBuilder报表开发 $52 
   实例1:查询表Book的内容的存储过程 
   create proc query_book 
  as 
  select * from book 
   go 
  exec query_book 
  实例2: 
   加入一笔记录到表book,并查询此表中所有书籍的总金额 
   Create proc insert_book 
   @param1 char(10),@param2 varchar(20),@param3 money,@param4 money output 
   with encryption ---------加密 
   as 
   insert into book(编号,书名,价格) Values(@param1,@param2,@param3) 
  select @param4=sum(价格) from book 
   go 
   执行例子
   declare @total_price money 
  exec insert_book '003','Delphi 控件开发指南',$100,@total_price 
  print '总金额为'+convert(varchar,@total_price) 
   go 

你可能感兴趣的:(数据库)