zoukankan      html  css  js  c++  java
  • 存储过程懂不懂

    存储过程的官方定义是这么说的:

    存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。


    其实说的再简单一点,她就是一个过程而已,对!就是和你所熟知的那个Sub……End Sub实质上是一个东西。

    存储过程除了与一般的过程拥有同样的优点外(多次调用,可移植性好等),还在一定程度上减少了网络流量(只需要传送调用过程的语句);而且通过对执行存储过程的权限控制还能保证系统数据的安全等等,等等。

    简而言之,使用存储过程存在很多好处,但是却没有明显的坏处。

    OK!铺垫完毕,开始正式介绍——存储过程。(这里应该有掌声)

    l  基本语法格式

    n  创建存储过程

       1: create proc 过程名/*建立存储过程*/
       2: @parameter 参数类型  /*输入参数*/
       3: ...
       4: @parameter 参数类型  output/*输出参数*/
       5: ...
       6: as
       7: begin
       8:     命令行或命令块/*需要存储过程执行的操作*/
       9: end

    n  执行存储过程

       1: execute 过程名 [参数,参数……][output] 

    n  修改存储过程

       1: alter proc 过程名*/修改存储过程*/
       2: @parameter 参数类型  /*输入参数*/
       3: ...
       4: @parameter 参数类型  ouput/*输出参数*/
       5: ...
       6: as
       7: begin
       8:    命令行货命令块/*存储过程执行的操作*/
       9: End

    n  重命名存储过程

       1: sp_rename 原过程名,新过程名

    n  删除存储过程

       1: drop proc存储过程名,[存储过程名2,……]

    l  存储过程在哪里?

    无论是系统自带的存储过程(在数据库master中,以sp_开头)还是自定义的存储过程,都在相应数据库中的“可编译性”——“存储过程”中,可以点击查看。

    PS:修改、重命名、删除存储过程也可以在相应数据库中的“可编译性”——“存储过程”中右键进行相应相关操作(看个人喜好)。

    l  实战演练

    1.       建立数据库(略)

    文章末尾附数据对应脚本,执行即可。image

    2.       建立无参数存储过程

       1: create proc proc1
       2: as 
       3: begin
       4:    select a.StuNo,StuName,StuCollege,StuScore from Student a
       5:    where StuScore >90
       6: end

    3.  建立有参数存储过程

       1: CREATE proc proc2
       2: @coures varchar(20)
       3: as 
       4: begin
       5:    select StuNo,StuName,StuCollege,StuScore from Student a
       6:    where StuScore=@Coures
       7: end

    4.  执行存储过程

       1: execute proc1
       2: execute proc2 '80'

    如图所示image

    附:对应数据脚本

       1: USE [StuInfo]
       2: GO
       3: SET ANSI_NULLS ON
       4: GO
       5: SET QUOTED_IDENTIFIER ON
       6: GO
       7: SET ANSI_PADDING ON
       8: GO
       9: CREATE TABLE [dbo].[Student](
      10:        [StuNo] [varchar](50) NULL,
      11:        [StuName] [varchar](50) NULL,
      12:        [StuCollege] [varchar](50) NULL,
      13:        [StuScore] [varchar](50) NULL
      14: ) ON [PRIMARY]
      15: GO
      16: SET ANSI_PADDING OFF
      17: GO
      18: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'1', N'丁福东', N'物电学院', N'80')
      19: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'2', N'斯蒂芬', N'物电学院', N'75')
      20: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'3', N'梵蒂冈', N'数信学院', N'98')
      21: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'4', N'金凯华', N'国贸学院', N'69')
      22: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'5', N'安淑霞', N'数信学院', N'78')
      23: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'6', N'张成栋', N'生科学院', N'84')
      24: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'7', N'安世伟', N'国贸学院', N'95')
      25: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'8', N'任文才', N'生科学院', N'71')
      26: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'9', N'秦福德', N'物电学院', N'54')
      27: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'10', N'孙德荣', N'生科学院', N'68')
    原创文章,转载请注明出处:http://www.cnblogs.com/beijiguangyong/
  • 相关阅读:
    ORACLE中seq$表更新频繁的分析
    VmWare平台Windows Server 2012 无响应宕机
    SQL Challenge ——快速找到1-100之间缺失的数
    ORACLE推导参数Derived Parameter介绍
    SQL SERVER 数据库各版本功能对比
    Jsp中格式化时间戳的常用标签
    SQL Server 2014 Database Mail重复发送邮件特殊案例
    采用HTML5之“data
    多线程之策略模式
    docker attach卡住,和exec的选择
  • 原文地址:https://www.cnblogs.com/beijiguangyong/p/2302783.html
Copyright © 2011-2022 走看看