定义:
          将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,   那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。
        讲到这里,可能有人要问:这么说存储过程就是一堆SQL语句而已啊?
          Microsoft公司为什么还要添加这个技术呢?
        那么存储过程与一般的SQL语句有什么区别呢?
        存储过程的优点:
          1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
          2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
          3.存储过程可以重复使用,可减少数据库开发人员的工作量
          4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权
        存储过程的种类:
          1.系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作,
          如   sp_help就是取得指定对象的相关信息
          2.扩展存储过程   以XP_开头,用来调用操作系统提供的功能
          exec   master..xp_cmdshell   'ping   10.8.16.1'
          3.用户自定义的存储过程,这是我们所指的存储过程
          常用格式
          Create   procedure   procedue_name
          [@parameter   data_type][output]
          [with]{recompile|encryption}
          as
          sql_statement
        解释:  
        output:表示此参数是可传回的
        with   {recompile|encryption}
        recompile:表示每次执行此存储过程时都重新编译一次
        encryption:所创建的存储过程的内容会被加密
        如:
          表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   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
        存储过程的3种传回值:
          1.以Return传回整数
          2.以output格式传回参数
          3.Recordset
        传回值的区别:
          output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中  
        实例3:设有两个表为Product,Order,其表内容如下:
          Product
          产品编号   产品名称   客户订数  
          001   钢笔   30  
          002   毛笔   50  
          003   铅笔   100  
          Order  
          产品编号   客户名   客户订金
          001   南山区   $30
          002   罗湖区   $50
          003   宝安区   $4
        请实现按编号为连接条件,将两个表连接成一个临时表,该表只含编号.产品名.客户名.订金.总金额,
        总金额=订金*订数,临时表放在存储过程中
        代码如下:
          Create   proc   temp_sale
          as
          select   a.产品编号,a.产品名称,b.客户名,b.客户订金,a.客户订数*   b.客户订金   as总金额
          into   #temptable   from   Product   a   inner   join   Order   b   on   a.产品编号=b.产品编号
          if   @@error=0  
          print   'Good'
          else
        &n bsp; print   'Fail'
          go

存储过程介绍  
一、先介绍一下什么是存储过程  
存储过程是利用SQL   Server所提供的Tranact-SQL语言所编写的程序。Tranact-SQL语言是SQL   Server提供专为设计数据库应用程序的语言,它是应用程序和SQL   Server数据库间的主要程序式设计界面。它好比Oracle数据库系统中的Pro-SQL和Informix的数据库系统能够中的Informix-4GL语言一样。这类语言主要提供以下功能,让用户可以设计出符合引用需求的程序:  
1)、变量说明  
2)、ANSI兼容的SQL命令(如Select,Update….)  
3)、一般流程控制命令(if…else…、while….)  
4)、内部函数

二、存储过程的书写格

CREATE   PROCEDURE   [拥有者.]存储过程名[;程序编号]  
[(参数#1,…参数#1024)]  
[WITH  
{RECOMPILE   |   ENCRYPTION   |   RECOMPILE,   ENCRYPTION}  
]  
[FOR   REPLICATION]  
AS   程序行

其中存储过程名不能超过128个字。每个存储过程中最多设定1024个参数  
(SQL   Server   7.0以上版本),参数的使用方法如下:

@参数名   数据类型   [VARYING]   [=内定值]   [OUTPUT]

每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL   Server所支持的数据类型都可使用。  
[=内定值]相当于我们在建立数据库时设定一个字段的默认值,这里是为这个参数设定默认值。[OUTPUT]是用来指定该参数是既有输入又有输出值的,也就是在调用了这个存储过程时,如果所指定的参数值是我们需要输入的参数,同时也需要在结果中输出的,则该项必须为OUTPUT,而如果只是做输出参数用,可以用CURSOR,同时在使用该参数时,必须指定VARYING和OUTPUT这两个语句。

例子:  
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

例子说明:  
该例子是建立一个简单的存储过程order_tot_amt,这个存储过程根据用户输入的定单ID号码(@o_id),由定单明细表(orderdetails)中计算该定单销售总额[单价(Unitprice)*数量(Quantity)],这一金额通过@p_tot这一参数输出给调用这一存储过程的程序

三、在SQL   Server中执行存储过程

在SQL   Server的查询分析器中,输入以下代码:  
declare   @tot_amt   int  
execute   order_tot_amt   1,@tot_amt   output  
select   @tot_amt

以上代码是执行order_tot_amt这一存储过程,以计算出定单编号为1的定单销售金额,我们定义@tot_amt为输出参数,用来承接我们所要的结果

数据库---存储过程总结相关推荐

  1. mysql过程异常处理_mysql数据库存储过程异常处理

    14.1.4  定义条件和处理程序 定义条件和处理程序是事先定义程序执行过程中可能遇到的问题.并且可以在处理程序中定义解决这些问题的办法.这种方式可以提前预测可能出现的问题, 并提出解决办法.这样可以 ...

  2. oracle数据库存储过程中NO_DATA_FOUND不起作用解决

    oracle数据库存储过程中NO_DATA_FOUND不起作用 1.首先创建一个表lengzijiantest,表中只有一个字段f_id ? 1 2 3 4 5 [cpp] CREATE TABLE ...

  3. JDBC对MySQL数据库存储过程的调用

    一.MySQL数据库存储过程: 1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完毕特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中.用 ...

  4. 使用shell脚本调用mysql数据库存储过程,并设置定时任务

    本来是要mysql数据库中创建事件任务来,定时执行存储过程,做数据传输的...后来由于种种原因,就使用crontab来定时执行,调用存储过程. 实现这个数据传输分为两步: 第一步:编写shell脚本调 ...

  5. mysql数据库存储过程及调用方法

    mysql数据库存储过程及调用方法 mysql5.0以后就支持存储过程了,目前mysql的6.0Alpha版也已经推出.6.0不仅支持大型数据库如oracle等的绝大部分功 能,如存储过程.视图.触发 ...

  6. 数据库:存储过程_数据科学过程:摘要

    数据库:存储过程 Once you begin studying data science, you will hear something called 'data science process' ...

  7. jdbc存储过程mysql_JDBC对MySQL数据库存储过程的调用

    1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完成特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中,用户通过指定存储过程的名字并给出参 ...

  8. 易语言 存储过程 mysql_在易语言中调用MS SQL SERVER数据库存储过程(Transact-SQL)方法总结...

    作者:liigo 日期:2010/8/25 Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接 ...

  9. java调用数据库存储过程的接口是_JAVA调用数据库存储过程

    JAVA调用数据库存储过程 2014/11/6 18:20:14  可怜的猫  程序员俱乐部  我要评论(0) 摘要:packagecom.ljq.test;importjava.sql.Connec ...

  10. 让你提前认识软件开发(28):数据库存储过程中的重要表信息的保存及相关建议...

    第2部分 数据库SQL语言 数据库存储过程中的重要表信息的保存及相关建议 1. 存储过程中的重要表信息的保存 在非常多存储过程中,会涉及到对表数据的更新.插入或删除等,为了防止改动之后的表数据出现故障 ...

最新文章

  1. ssh在dhcp自动获取地址的时候使用
  2. 7 centos 源码安装samba_centos 7 安装 samba 服务
  3. 在JAX-RS中使用@Context [第1部分]
  4. 大坑!有网,电脑qq登不上去!!
  5. pacs系统服务器配置,pacs系统服务器配置
  6. C# 序列化之二进制
  7. 如何优雅的定义 App 的界面设计
  8. 用友数据库最新会计期间_6千左右预算,2021年Word/Excel/用友/ 金蝶/SQL数据库-财务会计轻薄笔记本推荐...
  9. jdeveloper12.1.3的安装与卸载
  10. 算法与数据结构 第3章 高级排序算法下 学习笔记
  11. IIS5.1、IIS6.0、IIS7.5中安装配置MVC 3
  12. 关于ps中钢笔工具的介绍
  13. RDA5856ETE系列_(1)新手入门
  14. linux上启动eureka集群服务,SpringCloud@Docker系列: 运行Eureka Server集群
  15. 直击人心的数据可视化设计作品
  16. CF731B Coupons and Discounts 题解
  17. 从零开始的Nginx详解(3)【Nginx-Https服务配置详解】
  18. 解释某宝的一段混淆视听的代码
  19. APP的UI设计趋势与巧妙使用(二)
  20. 毕业设计-基于微信小程序的人脸访客管理系统

热门文章

  1. 手机App与蓝牙手柄
  2. NIO-Selector类详解
  3. html jsgif效果类似,js浮动图片的动态效果
  4. 【JAVA程序设计】(C00094)基于SSM学生考勤管理系统
  5. 最新安徽安全员B考试判断题库(2)
  6. 音序表字母大小写的正确写法
  7. “元宇宙游戏之光”Cyber Dragon
  8. java装箱与拆箱原理_深入理解Java中的装箱和拆箱
  9. java多层if else嵌套语句的优化思路,滑动验证码防刷功能开发
  10. Day27-万物皆对象