首页 > 技术文章 > SQL语句(十八_补充)——存储过程

douzujun 2017-04-17 15:40 原文

一、 变量

1. 形式: @x (局部), @@x(全局)

2. 定义: declare @x

3. 赋值:Set @x = ?

4. 作用:

  • 通用化

  • 存储在服务器

5. 存储过程(预编译过的T-SQL语句)

  • 优点:

    • 完成复杂的运算
    • 保证数据的安全性和完整性
    • 效率高
    • 网络负载低
    • 实现企业规则 (模块化)
Create  proc Pexa1  @SN  char(10)
As
begin
select Sname
From Student
where sdept in
    (select sdept 
     From Student
     where Sname = @SN
    )
end

6. 存储过程的类型

  1. 系统存储过程

    存储过程的前缀: SP_xxx

  2. 创建存储过程的语法

    CREATE PROC 存储过程 形参表

    AS

    begin T-SQL 语句块 end

  3. 形参表

    @X1 类型1, @X2 类型2,......, @Y1 类型n Output

    ​ 输入形参 输出形参

    注: 不是所有变量都做性参表
  4. 实例

Create Proc PEXA2 @x int
AS
begin
Select Sno, Avg(Score)
From SC
group by Sno having AVG(Score) >= @x
end

--例2 
Create Proc PEXA3 
AS
begin
Select Sno
From SC
Where Sno Not in 
    (Select Sno
     From SC
     where Cno = '3'
    )
end 

4. 执行存储过程

  ​ EXEC PEXP3

  ​ EXEC PEXP1 '刘晨'

5. 删除 Drop Proc 名

6. 修改:

  ​ ALTER Proc p1

7. 实例

--在Student表中,创建指定学号的删除操作的存储过程
Create Proc p2 
AS
begin
delete from Student
where Sno = @sn
end


--将student表中,sno的后一位是2的学生的学号、姓名分别赋值给 变量X, Y
--问题转换: 查询Sno的后一位是2的学生的学号、姓名

declare @x char(10), @Y varchar(9) --定义变量
Select @X = sno, @Y = Sname        --为变量赋值
From Student
where right(sno, 1) = '2'          --倒数第二位 left(rihgt(sno, 2), 1)

select @X, @Y                      --利用Select语句显示变量内容

Select 语句功能推广
1: 可同时为多个变量赋值, 其值来自数据库.
2: 可让外部程序访问数据库

7.命令

--在屏幕上显示某个'借书证号'到期图书的'图书编号'(借书期限为30天)

Declare @借书证号 char(10), @图书编号 char(6)
SET @借书证号 = '00006' -- 输入变量初始化

Select @图书编号 = books.图书编号
From borrow, books
where borrow.图书编号 = books.图书编号
      and 还书日期 IS NULL
      and datediff(day, 借书日期, getdate()) > 30
      and 借书证号 = @借书证号
PRINT '超期图书是: ' + @图书编号

 

推荐阅读