当前位置: 首页 > news >正文

第十二章 管理存储过程

存储过程与函数不同,因为存储过程并不返回取代其名称的值,也不能直接在表达式中使用

 

存储过程的优点

1)可用存储过程封装事务规则.一旦封装完成,这些规则就可用于多个应用,从而有一个一致的数据接口,因此,若需改变过程的功能,只需在一个地方对其进行修改,而不必对每个应用都进行修改.

2)存储过程允许标准组件式编程: 存储过程在被创建以后,可以再程序中被多次调用,而不必重新编写该存储过程的sql语句;而且数据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响,因为应用程序源代码只包含存储过程的调用语句,从而极大地提高了程序的可移植性.

3)存储过程能够实现较快的执行速度: 如果某一操作包含大量的t-dql代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多.因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析优化,并给出最终被存在系统表中的执行计划;而批处理的t-sql语句在每次运行时都要进行编译和优化,因此速度相对要慢一些

4)存储过程能够减少网络流量: 对于同一个针对数据数据库对象的操作(如查询修改),如果这一操作所涉及到的t-sql语句被组织成一存储过程,那么当在客户计算机调用该存储过程时,网络中传送的只是该调用语句;否则将是多条sql语句,从而大大增加了网络流量,降低网络负载.

5)存储过程作为一种安全机制来充分利用: 系统管理员通过对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访问权限的限制,避免非授权用户对数据的访问,保证数据的安全性.

 

创建存储过程的规则

1)几乎任何可以写成批处理的t-sql代码都可用于创建存储过程,但是在设计存储过程时,需要遵循下列规则

2)名字必须符合sql server命名规则

3)引用的对象必须在创建存储过程前就存在

4)不能在单个存储过程中创建后去掉或在创建同名的对象

5)存储过程最多能有255个参数

6)在自己的存储过程中可以引用临时表,局部临时表在过程结束时将会消失

7)在存储过程中不能有如下的sql创建语句 create default    create procedure     create rule     create trigger     create view

8)可在过程中嵌套过程

9)创建存储过程的文本不能超过64k字节,以为sql存放在syscomments表中

10)若在存储过程中使用了select * ,而底层表中加入了新的列,新的列在过程运行时无法显示.

 

 

创建存储过程 例子:

 在数据库company中创建一个存储过程,用于返回项目表的不小于5000的项目情况,并按项目表的降序进行排列

use company

if exists(select name from sysobjects where name='pinfo50000' and type='p')

drop procedure pinfo50000

go

create procedure pinfo50000 as select * from project where 项目表的>=5000 order by 项目表的 desc

go

exec pinfo50000

go

 

 

查看存储过程的定义

例: exec sp_helptext GetAvgPbiaodi

查看存储过程的所有者信息

例: exec sp_help GetAvgPbiaodi

查看存储过程的相关性

例 exec sp_depends GetAvgPbiaodi

重命名存储过程

exec sp_rename GetAvgPbiaodi ,'项目平均标的过程'

 

修改存储过程: 但是不会更改权限,也不影响相关的存储过程或触发器

删除存储过程:drop procedure pinfo50000

          可以选择是否制定过程所有者名称,但不能制定服务器名称和数据库名称

          不能除去组内的个别过程,必须除去整个过程组;如果该过程组在其它应用程序或存储过程中被调用,系统会显示出错信息

 

创建一组过程

create Proc group_sp ; 1

as select * from authors

go

create Proc group_sp ;2

as select au_lname from authors

go

create Proc group_sp ;3

as select distinct city from authors

go

这个批处理语句将创建一个称为group_sp的单一过程,它包括3个不同过程作为它的一部分.要引用单个过程,只要执行他们并带有;number作为名字的一部分

再删除过程组时,只要删除过程的名字,所用组的部件也将被删掉:

例 drop procedure dbo.group_sp

注意:无法删除组中的某一过程

 

转载于:https://www.cnblogs.com/yanmei-yaomy/archive/2010/08/11/3024819.html

相关文章:

  • 数据之美(十一):30 套 Infographics 作品欣赏
  • jbpm4.3整合web工程时异常解决方案
  • JQERY limittext 插件0.2版
  • 家族企业传承问题研究
  • [2010-8-30]
  • jquery js 下载|jquery-1.4.2 下载|jquery最新版本下载
  • CYQ.Data 轻量数据层之路 使用篇三曲 MAction 取值赋值(十四)
  • 图释WSPBuilder的使用
  • 第K大数问题
  • GirdView实现折叠式效果
  • SQL语句优化方法30例(转)
  • 小技巧:批量另存
  • c# 保留2位小数 整数格式化的操作!
  • GridView导出Excel研究
  • img图片没找到onerror事件 Stack overflow at line: 0
  • github指令
  • IndexedDB
  • leetcode388. Longest Absolute File Path
  • vue中实现单选
  • 程序员最讨厌的9句话,你可有补充?
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 记一次用 NodeJs 实现模拟登录的思路
  • 技术发展面试
  • 检测对象或数组
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 我有几个粽子,和一个故事
  • 一文看透浏览器架构
  • 译有关态射的一切
  • 原生js练习题---第五课
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • scrapy中间件源码分析及常用中间件大全
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (2)MFC+openGL单文档框架glFrame
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (HAL库版)freeRTOS移植STMF103
  • (libusb) usb口自动刷新
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (剑指Offer)面试题34:丑数
  • (推荐)叮当——中文语音对话机器人
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • ***检测工具之RKHunter AIDE
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET成年了,然后呢?
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • @FeignClient注解,fallback和fallbackFactory
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [Android Studio] 开发Java 程序
  • [C\C++]读入优化【技巧】
  • [CSS]盒子模型
  • [dfs搜索寻找矩阵中最长递减序列]魔法森林的秘密路径