SQL Server数据库基础知识

存储过程概述

  • 什么是存储过程?

  • 存储过程的种类

  • 如何创建、修改、删除、调用存储过程?

  • 存储过程的优缺点

  • 存储过程和触发器的区别?

  • 存储过程和函数的区别?

  • 存储过程的使用

1. 什么是存储过程?

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个“execute 存储过程名 参数”命令来调用存储过程。

2. 存储过程的种类

1 系统存储过程

以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作。

2 自定义存储过程(本地存储过程)

以cp_开头,是用户为了完成某一特定功能而创建的存储过程,一般所说的存储过程就是指本地存储过程。

3 临时存储过程

分为两种存储过程:

一是本地临时存储过程,以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它;

二是全局临时存储过程,以两个井字号(##)号开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,全局临时存储过程一旦创建,以后连接到服务器的任意用户都可以执行它,而且不需要特定的权限。

4 远程存储过程

在SQL Server2005中,远程存储过程(Remote Stored Procedures)是位于远程服务器上的存储过程,通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。

5 扩展存储过程

扩展存储过程(Extended Stored Procedures)是用户可以使用外部程序语言编写的存储过程,而且扩展存储过程的名称通常以xp_开头。

3. 如何创建、修改、删除、调用存储过程?

–创建存储过程
create proc 存储过程名字
as
语句

–修改存储过程
alter proc 存储过程名字
as
语句

–卸载存储过程
drop proc 存储过程名字

–调用存储过程
exec 存储过程名称

4. 存储过程的优缺点

优点:

1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

3.存储过程可以重复使用,可减少数据库开发人员的工作量(复用性高,面向对象的编程思想)

4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权

缺点:

​ 1:调试麻烦,但是用 PL/SQL Developer 调试很方便!弥补这个缺点。

​ 2:移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。

​ 3:重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过 程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。

​ 4: 如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变 化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。

5. 存储过程和触发器的区别?

触发器与存储过程的主要区别在于触发器的运行方式。存储过程必须有用户、应用程序或者触发器来显示的调用并执行,而触发器是当特定时间出现的时候,自动执行或者激活的,与连接用数据库中的用户、或者应用程序无关。

6. 存储过程和函数的区别?

存储过程是用户定义的一系列SQL语句的集合,而函数通常是数据库已定义的方法,具体区别如下:

1.对于存储过程来说可以返回参数,而函数只能返回值或者表对象.

2.函数必须有返回值,存储过程可有可无

3.存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一部分来调用

7. 存储过程的使用

接下来以两张表来向大家演示存储过程的使用。

书籍分类表(BookTypes)和书籍表(books)结构设计

书籍分类表(BookTypes)
ID Name(分类名称) Nums(数量)
1 科技类 10
2 文学类 10
3 军事类 10
书籍表(books)
ID Name(书籍名称) Remark(备注) TypeID(分类ID)
1 数据库 NULL 1
2 西游记 NULL 2
3 百团大战 NULL 3
4 数据库 NULL 1
5 数据库 NULL 1
6 数据库 NULL 1
7 数据库 NULL 1
1:不带参数的存储过程
--创建存储过程查询数据
create proc cp_select_book_bybook --创建一个叫cp_select_book_bybook的存储过程
as --要执行的操作select * from books --从books表中查询数据
--调用存储过程
exec cp_select_book_bybook
2:带输入参数的存储过程
--根据名称参数查询数据
create proc cp_select_book_ByName
(
@name varchar(50)
)
asselect*from books where name like '%'+@name+'%'
--调用
exec cp_select_book_ByName'数据库'
3:带输出参数的存储过程
--根据名称查询,返回记录,同时返回记录数
go
create proc cp_select_book_ByNameExt
(
@name varchar(50),
@recordRows int out  --out表示输出类型
)
asselect*from books where name like '%'+@name+'%'select @recordRows=count(*) from books--调用--定义一个变量,接收返回参数@recordRows的值declare @rs int --定义一个变量接收@recordRows的数据exec cp_select_book_ByNameExt'数据库',@rs outprint '查询到的记录数是:'+convert(varchar(50),@rs)
4:简单的分页的存储过程的创建和调用
--根据名称,页码,每页显示的条数  --输入参数
--返回查询条件的总记录数  --输出参数
--显示查询结果go
create proc cp_page
(
@name varchar(50),
@pageIndex int,  --页码
@pageSize int,  --每页显示条数
@rs int out  --总记录数,out表示输出类型
)
asselect top (@pageSize)*from bookswhere id not in(select top (@pageSize*(@pageIndex-1)) id from books where name like '%'+@name+'%'order by id)and name like '%'+@name+'%' order by idselect @rs= count(*) from books where name like '%'+@name+'%'--调用--定义一个变量,接收返回参数@totalcount的值declare @rows int --定义一个变量接收@totalcount的数据exec cp_page'数据库',1,5,@rows outprint '查询到的总记录数是:'+convert(varchar(50),@rows)

SQL Server数据库基础知识——数据库存储过程怎么写相关推荐

  1. [转]SQL Server 索引基础知识(2)----聚集索引,非聚集索引

    SQL Server 索引基础知识(2)----聚集索引,非聚集索引 [来自]http://blog.joycode.com/ghj/archive/2008/01/02/113291.aspx 由于 ...

  2. SQL Server 索引基础知识(8)--- 数据基本格式补充(转自蝈蝈俊.net)

    我在SQL Server 索引基础知识系列中,第一篇就讲了记录数据的基本格式.那里主要讲解的是,数据库的最小读存单元:数据页.一个数据页是8K大小. 对于数据库来说,它不会每次有一个数据页变化后,就存 ...

  3. SQL Server 索引基础知识(1)--- 记录数据的基本格式

    不论是缓存的数据信息,还是物理保存的信息,他们的基本单位都是数据页.所以理解数据页是最最基础的知识点,本篇博客就介绍跟索引有关的数据页的一些基础知识. 数据页的基础知识 SQL Server 中数据存 ...

  4. SQL Server 索引基础知识 1 --- 记录数据的基本格式

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 由于需要 ...

  5. 数据库基础知识——数据库的相关概念

    文章目录 1.数据库的好处 2.数据库相关概念 3.数据库存储数据的特点 1.数据库的好处 1.持久化数据到本地 2.可以实现结构化查询,方便管理 2.数据库相关概念 1.DB:数据库,保存一组有组织 ...

  6. SQL Server 索引基础知识(10)----Join 时的三种算法简介

    我们书写查询语句的时候,Join 参数之前可以是下面三个 { LOOP | MERGE | HASH } JOIN  . 如果不使用,则系统自己分析那种方式快,使用那种方式. 这其实是SQL Serv ...

  7. SQL Server 索引基础知识(7)----Indexing for AND(转自蝈蝈俊.net)

    我们通过一个实例来看 有And 操作符时候的最常见的一种情况.我们有下面一个表, CREATE TABLE [dbo].[member]( [member_no] [dbo].[numeric_id] ...

  8. SQL数据库基础知识巩固

    SQL数据库基础知识 数据库,又称"电子化的文件柜",是"按照数据结构来组织.存储和管理数据的仓库",是一个长期存储在计算机内的.有组织的.可共享的.统一管理的 ...

  9. SQL数据库基础知识-巩固篇一

    SQL数据库基础知识-巩固篇<一>... 首先展示两款我个人很喜欢的数据库-专用于平时个人SQL技术的练习<特点:体积小,好安装和好卸载,功能完全够用了> MySQL-57 D ...

  10. Mysql数据库基础知识(五)之:视图、变量、存储过程、函数、流程控制结构

    第一部分:Mysql数据库基础知识(一)之 基础查询----分组查询 第二部分:Mysql数据库基础知识(二)之 连接查询----子查询-----分页查询------union联合查询 第三部分:My ...

最新文章

  1. html5--1.15 style元素与HTML样式基础
  2. Asp.Net Membership 回顾
  3. python/进程线程的总结
  4. 擷取 GridView 資料列的欄位值集合
  5. greenplum数据库建表及分区
  6. 小红伞 for 2003
  7. React组件Input输入拼音时触发搜索的解决方案
  8. Ubuntu安装mysql-8.0.20-linux-glibc2.12-i686.tar.xz 步骤
  9. 计算机网络中最常用的三种设备,计算机网络基础试卷6
  10. 2点睡10点起不算熬夜?除非你每天都能执行
  11. scp远程拷贝命令及not a regular file 解决方案
  12. android 谷歌地图围栏,基于OpenLayers实现地理围栏 谷歌百度高德地图都可以
  13. 最新北京人才公寓申请流程,技术员的福利~
  14. 《生物信息学:导论与方法》--本体论、分子通路鉴定--听课笔记(十八)
  15. 奥鹏计算机19在线作业答案,东师计算机应用基础19春在线作业1【标准答案】
  16. 新秀学习51供应链管理的----模拟笔记本PC和51串行通讯1
  17. countly 处理用户行为数据方案
  18. PCL估计点云的表面法向量
  19. 在CSDN写文章是一种什么体验?
  20. 26岁转行软件测试,目前34了,分享一些我的经历和感受

热门文章

  1. vscode 字体颜色变得花里胡哨的
  2. Windows Server 2008 R2 Enterpris服务器上安装一个Moodle
  3. C# DevExpress ChartControl用法总结
  4. 谭浩强c语言程序设计 在线,C语言程序设计_谭浩强.pdf
  5. css compressor java_使用YUI Compressor压缩CSS/JS
  6. 达内java学习笔记
  7. VC2008中影响exe大小和速度的全部编译选项
  8. 使用 HTML 和 CSS 创建响应式猫猫图片库
  9. 洪恩在线nbsp;Css快速入门。
  10. 一些NLP数据/语料下载