`
renzhelife
  • 浏览: 668125 次
文章分类
社区版块
存档分类
最新评论

存储过程懂不懂

 
阅读更多

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

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


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

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

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

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

l 基本语法格式

n 创建存储过程

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

n 执行存储过程

   1: execute 过程名 [参数,参数……][output] 
<!--CRLF-->

n 修改存储过程

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

n 重命名存储过程

   1: sp_rename 原过程名,新过程名
<!--CRLF-->

n 删除存储过程

   1: drop proc存储过程名,[存储过程名2,……]
<!--CRLF-->

l 存储过程在哪里?

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

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

l 实战演练

1. 建立数据库(略)

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

2. 建立无参数存储过程

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

3. 建立有参数存储过程

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

4. 执行存储过程

   1: execute proc1
<!--CRLF-->
   2: execute proc2 '80'
<!--CRLF-->

如图所示image

附:对应数据脚本

   1: USE [StuInfo]
<!--CRLF-->
   2: GO
<!--CRLF-->
   3: SET ANSI_NULLS ON
<!--CRLF-->
   4: GO
<!--CRLF-->
   5: SET QUOTED_IDENTIFIER ON
<!--CRLF-->
   6: GO
<!--CRLF-->
   7: SET ANSI_PADDING ON
<!--CRLF-->
   8: GO
<!--CRLF-->
   9: CREATE TABLE [dbo].[Student](
<!--CRLF-->
  10:        [StuNo] [varchar](50) NULL,
<!--CRLF-->
  11:        [StuName] [varchar](50) NULL,
<!--CRLF-->
  12:        [StuCollege] [varchar](50) NULL,
<!--CRLF-->
  13:        [StuScore] [varchar](50) NULL
<!--CRLF-->
  14: ) ON [PRIMARY]
<!--CRLF-->
  15: GO
<!--CRLF-->
  16: SET ANSI_PADDING OFF
<!--CRLF-->
  17: GO
<!--CRLF-->
  18: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'1', N'丁福东', N'物电学院', N'80')
<!--CRLF-->
  19: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'2', N'斯蒂芬', N'物电学院', N'75')
<!--CRLF-->
  20: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'3', N'梵蒂冈', N'数信学院', N'98')
<!--CRLF-->
  21: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'4', N'金凯华', N'国贸学院', N'69')
<!--CRLF-->
  22: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'5', N'安淑霞', N'数信学院', N'78')
<!--CRLF-->
  23: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'6', N'张成栋', N'生科学院', N'84')
<!--CRLF-->
  24: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'7', N'安世伟', N'国贸学院', N'95')
<!--CRLF-->
  25: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'8', N'任文才', N'生科学院', N'71')
<!--CRLF-->
  26: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'9', N'秦福德', N'物电学院', N'54')
<!--CRLF-->
  27: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'10', N'孙德荣', N'生科学院', N'68')
<!--CRLF-->
分享到:
评论

相关推荐

    oracle存储过程

    存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。 定义总是很抽象。存储过程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL Server)。如果我们通过创建存储...

    SQL Server 2000 存储过程与XML编程1

    如果你不懂存储过程,你看这个,如果你想深究存储过程,看这个。你下载了给我发邮件:我给你实例数据库,也就是书里面的所有的例程和其他的!sunwu5212@126.com 。用超星阅读,文件很大!分两部分上传!这是第一部分...

    数据库存储过程的学习资料

    Sybase的存储过程是集中存储在SQL Server中的预先定义且已经编译好的事务。存储过程由SQL语句和流程控制语句组成。它的功能包括:接受参数;调用另一过程;返回一个状态值给调用过程或批处理,指示调用成功或失败;返回...

    SQL Server 2000 存储过程与XML编程2.rar

    如果你不懂存储过程,你看这个,如果你想深究存储过程,看这个。你下载了给我发邮件:我给你实例数据库,也就是书里面的所有的例程和其他的!sunwu5212@126.com 。用超星阅读,文件很大!分两部分,此为第二部分!

    mysql+数据库存储过程

    不了解数据库存储过程的同学可以来看看,本人之前也不懂,最近用到了才自己学了一下

    jave调用anywhere存储过程

    MyEclipse, anywhere 9

    oracle使用dblink高速复制表数据的动态存储过程

    本程序不同步blob和clob字段,玩oracle的人都懂,用sql同步此类数据,速度上不去,此类数据应该要用导出导入的方式提升速度。 具体请参阅程序,可根据自已需要进行修改。 参数说明: CREATE OR REPLACE PROCEDURE ...

    Ext.Net 服务器端分页 存储过程

    真正实现Ext.net的服务器端分页,带存储过程,数据库用aspnet_regsql.exe工具自动生成就行了,不懂的朋友上网查下就知道了

    人工智能的自然语言处理源码和词库(mysql数据库形式,程序为存储过程,词库为表格)输入一个或多个句子,输出语法分析和词性标注

    教程从最基本知识开始教,对mysql完全不懂的零基础的人,也能看懂、学会。 运行时,调用abc函数。第一个参数是输入参数,为属于的语句。第二个参数为输出参数,就是输出的语法分析。例如: call abc("猫吃鼠",@a); ...

    分页存储过程

    分页存储过 比较简单些 如果有人看不懂就可以来问

    java调用oracle存储过程并得到结果集

    jdk1.5 MyEclipse oracle11g

    Oracle 9i 数据库移动过程

    但对于一些只了解系统,对数据库不是十分懂的人员来说,oracle的移动就不是那么容量了。例如当系统安装完成以后,存储空间扩容了,需要对原对ORACLE进行移动,需要进行数据移动。以前在ORACLE8I FOR WINDOWS 2000中...

    C# 操作MySQL数据库类

    至于调用方法,应该不用我说下载者应该也懂得吧,如果是对C#一巧不通的初学者,不懂也不要怪我,可以问我,或问懂点的人。 这是我常用的数据库操作类,没有任何问题。 ------------------------------------- 我的...

    C# 操作MSSQL数据库类

    至于调用方法,应该不用我说下载者应该也懂得吧,如果是对C#一巧不通的初学者,不懂也不要怪我,可以问我,或问懂点的人。 这是我常用的数据库操作类,没有任何问题。 ------------------------------------- 我的...

    SQL Server 聚焦存储过程性能优化、数据压缩和页压缩提高IO性能方法(一)

    在涉及到SQL Server性能优化时,我看到的有些文章就是一上来列出SQL Server的性能优化条例,根本没有弄清楚为什么这么做,当然也有可能是自己弄懂了,只是作为备忘录,但是到了我这里,我会遵循不仅仅是备忘录,还要...

    Kin_Db_Pager.rar_KIN

    非常好用的分页类,很容易定制各种风格,可以与网上流行的 《24款超实用的Web 2.0风格...至存储过程分页,暂时没编写自己的脚本,但完全兼容叶子分页类的存储过程。 如下一行代码即可实现帮助,不需要记住所有的属性设定.

    ASP 分页类 Kin_Db_Pager v1.08.rar

    常好用的分页类,很容易定制各种风格,可以与网上流行的 《24款超实用的Web 2.0风格...至存储过程分页,暂时没编写自己的脚本,但完全兼容叶子分页类的存储过程。 如下一行代码即可实现帮助,不需要记住所有的属性设定.

    基于C#的ERP数据管理系统

    如果你是刚学C/S的可以参考参考我这个系统,因为工作比较忙数据操作部分没有用存储过程来写,你可以自行修改成存储过程来处理数据。好了废话不多说了,应时间问题有兴趣的朋友可以直接和我索取源码我就不上传了。

    海益ERP数据管理系统

    这个管理系统是c#语言VS2008+MSSQL2005开发; 内容健全,不缺斤短两; 这套系统主要是根据ERP工作流程所写的一个系统,主要功能包括了销售...数据操作部分没有用存储过程来写,你可以自行修改成存储过程来处理数据。

    ERP数据管理系统源码20110803

    如果你是刚学C/S的可以参考参考我这个系统,因为工作比较忙数据操作部分没有用存储过程来写,你可以自行修改成存储过程来处理数据。好了废话不多说了,应时间问题有兴趣的朋友可以直接和我索取源码我就不上传了。

Global site tag (gtag.js) - Google Analytics