SqlServer——存储过程(未完工)

  http://www.cnblogs.com/blsong/archive/2009/11/30/1613534.html

  http://blog.csdn.net/lenotang/article/details/3329593

  http://www.cnblogs.com/hoojo/archive/2011/07/19/2110862.html

  存储过程是事先编好的、存储在数据库中的程序,这些程序用来完成对数据库的指定操作。存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。  

  SQL Server本身提供了一些存储过程,用于管理SQL Server和显示有关数据库和用户的信息,我们称之为系统存储过程用户也可以编写自己的存储过程,并把它存放在数据库中。这样安排的主要目的就是要充分发挥数据库服务器的功能,尽量减少网络上的堵塞。

优点:存储过程重用已缓存的的执行计划,节省了分析、解析和优化代码所需的CPU资源和时间,降低了网络流量。

架构:SqlServer按照以下顺序解析:当前数据库的sys架构;调用方的默认架构;当前数据库的dbo架构。

格式

create proc | procedure pro_name
[
   {@参数数据类型} [=默认值] [out|output],

         {@参数数据类型} [=默认值] [out|output],

         ....
]  
as
SQL_statements

 用法:

  通过以下例子来说明存储过程的用法,先创建如下表并插入数据:

create table student_cj(  name varchar(20) not null ,  km varchar(10) not null ,  cj int not null)
insert into student_cj values('小明','数学',100),('小明','语文',100),('小李','语文',100),('小虎','语文',100),('小强','语文',100),('小龙','语文',100),('小李','数学',100),('小虎','数学',100),('小强','数学',100),('小龙','数学',100)

  一、无参数存储过程

  1、创建存储过程如下:

create proc inquiry1
as
select name,km ,cj from student_cj

  2、执行

exec inquiry1

如图:

二、有参数存储过程
  1、创建存储过程

create proc inquiry2
@km varchar(10)='语文'  --参数默认为 '语文'
as
  select name,km ,cj from student_cj where km =@km

 2、执行存储过程

当执行 exec inquiry2 

如图:

当执行 exec inquiry2 @km='数学'

如图

  三、带输出参数的存储过程

     1、创建存储过程

create proc inquiry3
@km varchar(10)='数学',@cj int out  --@cj为输出类型参数
as
  begin
    select name,km ,cj from student_cj where km =@km
    select @cj= avg(cj) from student_cj where km =@km   --给@cj参数赋值
  end

2、执行存储过程
  declare @cj1 int  --执行存储过程前要声明输出类型参数(实参),其参数名可以与 形参 相同
  exec inquiry3 default, @cj1 out   --default表示第一个参数@km适用默认值 '数学'
  select @cj1 as '平均分'

     结果如下:

      



原文地址:https://www.cnblogs.com/SunBlog/p/3971427.html