1/什么是存储过程及概念

  Transact-SQL中的存储过程,非常类似于.Net语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。

  存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。

  通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句;相当于.Net中自己封装好的方法,需要的时候调用;

  Ø 存储过程的概念

     存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。

     存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。

     由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。同时由于在调用时只需用提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量、简单网络负担。

  

2\存储过程的优点

A、 存储过程允许标准组件式编程

存储过程创建后可以在程序中被多次调用执行,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,但对应用程序源代码却毫无影响,从而极大的提高了程序的可移植性。

B、 存储过程能够实现较快的执行速度

如果某一操作包含大量的T-SQL语句代码,分别被多次执行,那么存储过程要比批处理的执行速度快得多。因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的存储计划。而批处理的T-SQL语句每次运行都需要预编译和优化,所以速度就要慢一些。

C、 存储过程减轻网络流量

对于同一个针对数据库对象的操作,如果这一操作所涉及到的T-SQL语句被组织成一存储过程,那么当在客户机上调用该存储过程时,网络中传递的只是该调用语句,否则将会是多条SQL语句。从而减轻了网络流量,降低了网络负载。

D、 存储过程可被作为一种安全机制来充分利用

系统管理员可以对执行的某一个存储过程进行权限限制,从而能够实现对某些数据访问的限制,避免非授权用户对数据的访问,保证数据的安全。

  总结:

     1:存储过程就像方法一样,可以重复使用,这也无形之中提高了开发的效率;(开发效率高)

     2:因为存储过程是预编译的,在存储过程首次运行的时候,查询优化器会对其分析和优化,并把最终的存储计划存在系统表中,而SQL语句,每次每次运行都要预编译和优化,所以呢速度会比存储过程慢一些;(运行速度快)

     3:因为sql语句都是在网络中传输的,如果写一个查询十个表或者更多更复杂的操作,这个产生的字符串是庞大的。 如果用存储过程,只需要调用存储过程的名字就行了,这也是减轻网络流量,降低网络负载

     4:安全性高

Ø 系统存储过程

系统存储过程是系统创建的存储过程,目的在于能够方便的从系统表中查询信息或完成与更新数据库表相关的管理任务或其他的系统管理任务。系统存储过程主要存储在master数据库中,以“sp”下划线开头的存储过程。尽管这些系统存储过程在master数据库中,但我们在其他数据库还是可以调用系统存储过程。有一些系统存储过程会在创建新的数据库的时候被自动创建在当前数据库中。

常用系统存储过程:

  1. exec sp_databases; --查看数据库
  2. exec sp_tables; --查看表
  3. exec sp_columns student;--查看列
  4. exec sp_helpIndex student;--查看索引
  5. exec sp_helpConstraint student;--约束
  6. exec sp_stored_procedures;
  7. exec sp_helptext 'sp_stored_procedures';--查看存储过程创建、定义语句
  8. exec sp_rename student, stuInfo;--修改表、索引、列的名称
  9. exec sp_renamedb myTempDB, myDB;--更改数据库名称
  10. exec sp_defaultdb 'master', 'myDB';--更改登录名的默认数据库
  11. exec sp_helpdb;--数据库帮助,查询数据库信息
  12. exec sp_helpdb master;

常用系统存储过程

  1. --表重命名
  2. exec sp_rename 'stu', 'stud';
  3. select * from stud;
  4. --列重命名
  5. exec sp_rename 'stud.name', 'sName', 'column';
  6. exec sp_help 'stud';
  7. --重命名索引
  8. exec sp_rename N'student.idx_cid', N'idx_cidd', N'index';
  9. exec sp_help 'student';
  10.  
  11. --查询所有存储过程
  12. select * from sys.objects where type = 'P';
  13. select * from sys.objects where type_desc like '%pro%' and name like 'sp%';

系统存储过程示例:

Ø 用户自定义存储过程

1、 创建语法

  1. create proc | procedure pro_name
  2. [{@参数数据类型} [=默认值] [output],
  3. {@参数数据类型} [=默认值] [output],
  4. ....
  5. ]
  6. as
  7. SQL_statements

  2、创建不带参数的存储过程

  1. Create Proc proc_UserInfoSelect
  2. as
  3. begin
  4. Select * From UserInfo
  5. end
    --调用、执行存储过程
    exec SelectUserInfo

  3、修改存储过程

  1. --语法
  2. alter Proc 存储过程名字
  3. as
  4. begin
  5. 要执行的语句…………
  6. end
  7.  
  8. --查询ID=1的数据
  9. alter Proc proc_UserInfoSelect
  10. as
  11. begin
  12. Select * From UserInfo Where ID=1;
  13. end

  4、删除存储过程

  1. --关键字 关键字 存储过程的名字
  2.   drop procedure proc_UserInfoSelect

  5、创建有参数的存储过程

  1. --分页查询数据
  2. Create proc proc_UserInfoByPagingSelect(
  3. @pageIndex int, --当前页
  4. @pageSize int, --每页显示N条数据
  5. @count int output --一共多少条数据,返回的值
  6. )as
  7. begin
  8. Set @count=(Select COUNT(*) From UserInfo);
  9. Select * From (Select *, ROW_NUMBER() over(order by ID) as num From userinfo) as t
  10. Where t.num between (@pageIndex-1)*@pageSize+1 and @pageIndex*@pageSize;
  11. end

  6、不缓存存储过程

  1. Create proc proc_usersss
  2. with recompile
  3. as
  4. begin
  5. Select * From UserInfo;
  6. end

  7、 加密存储过程

  1. Create proc proc_userInfoSelect
  2. with encryption
  3. as
  4. begin
  5. select * from UserInfo;
  6. end
  7.  
  8. exec sp_helptext 'proc_usersss'
  9. exec sp_helptext 'proc_userInfoSelect'

8、 带游标参数存储过程

  1. --创建
  2. create proc proc_myCus
  3. @proCur cursor varying output
  4. as
  5. begin
  6. set @proCur=cursor forward_only static for
  7. select id,uname,upwd from userinfo
  8. open @proCur
  9. end
  10.  
  11. --调用
  12. declare @exc_proc cursor
  13. declare @ID varchar(32);
  14. declare @name varchar(32);
  15. declare @pwd varchar(32);
  16. exec proc_myCus @exc_proc output
  17. Fetch Next From @exc_proc INTO @ID,@name,@pwd
  18. while(@@FETCH_STATUS=0)
  19. begin
  20. Fetch Next From @exc_proc INTO @ID,@name,@pwd
  21. print @ID+' '+@name+' '+@pwd;

SQL:存储过程的更多相关文章

  1. PL/SQL存储过程编程

    PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...

  2. SQL存储过程分页(通用的拼接SQL语句思路实现)

    多表通用的SQL存储过程分页 案例一: USE [Community] GO /****** Object: StoredProcedure [dbo].[Common_PageList] Scrip ...

  3. SQL存储过程的调用及写法

    调用函数: public class SqlProcess { ; public DataSet ReturnSet = null; public SqlDataAdapter adapter = n ...

  4. sql存储过程几个简单例子

    导读:sql存储是数据库操作过程中比较重要的一个环节,对于一些初学者来说也是比较抽象难理解的,本文我将通过几个实例来解析数据库中的sql存储过程,这样就将抽象的事物形象化,比较容易理解. 例1: cr ...

  5. SQL存储过程生成顺序编码

    一.第一种方式 USE [WJKC]GO/****** Object:  StoredProcedure [dbo].[Address_GetCode1]    Script Date: 2016/3 ...

  6. SQL 存储过程入门(事务)(四)

    SQL 存储过程入门(事务)(四)   本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我 ...

  7. 在SQL存储过程中给条件变量加上单引号

    在SQL存储过程中给条件变量加上单引号,不加语句就会出问题,以下就是在存储过程中将条件where设置成了动态变化的,给where赋完值再和前面的语句拼接,再execute(SQL) ), )), )+ ...

  8. SQL存储过程概念剖析

    一.SQL存储过程的概念,优点及语法 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execut ...

  9. sql 解析字符串添加到临时表中 sql存储过程in 参数输入

    sql 解析字符串添加到临时表中  sql存储过程in 参数输入 解决方法 把字符串解析 添加到 临时表中 SELECT * into #临时表   FROM dbo.Func_SplitOneCol ...

  10. 查询数据库后台Block 的Sql存储过程

    查询数据库后台Block 的Sql存储过程 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO /*记录SQL Server的阻塞情况 wang 200 ...

随机推荐

  1. Android学习之Adapter(数据适配器)

    1.定义     数据适配器是AdapterView视图(如ListView - 列表视图控件.Gallery - 缩略图浏览器控件.GridView - 网格控件.Spinner - 下拉列表控件. ...

  2. http协议与https协议的区别

    1.前言 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可 ...

  3. LOJ#6045. 「雅礼集训 2017 Day8」价(最小割)

    题面 传送门 题解 首先先把所有权值取个相反数来求最大收益,因为最小收益很奇怪 然后建图如下:\(S\to\)药,容量\(\inf+p_i\),药\(\to\)药材,容量\(\inf\),药材\(\t ...

  4. [实战] SSH 图形化转发

    [实战] SSH 图形化转发 一.介绍 Unix Like操作系统不是只能进行服务器的架设而已,在美编.排版.制图.多媒体应用上也是有其需要的.这些需求都需要用到图形介面(Graphical User ...

  5. (一)Python装饰器的通俗理解

    在学习Python的过程中,我相信有很多人和我一样,对Python的装饰器一直觉得很困惑,我也是困惑了好久,并通过思考和查阅才能略有领悟,我希望以下的内容会对你有帮助,我也努力通过通俗的方式使得对Py ...

  6. 部署WSUS服务(一)

    引言:随着网络的发展,我们的生活也越来越离不开网络,但面临的安全威胁也越来越多.像去年爆发的针对Windows系统的勒索病毒(Wanna Cry)和年初爆发的Intel芯片漏洞告诉我们网络威胁时时刻刻 ...

  7. Asp.net的生命周期之页生命周期

    参考:http://msdn.microsoft.com/zh-cn/library/ms178472%28v=vs.100%29.aspx http://msdn.microsoft.com/zh- ...

  8. linux克隆后修配置

    第一步:克隆 第二步:vi /etc/sysconfig/network-scripts/ifcfg-eth0   编辑 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM ...

  9. SSAS Tabular模式中关系设置不支持直接设置多对多?

    在网上文档发现一篇文章 微软BI 之SSAS 系列 - 多维数据集维度用法之一 引用维度 Referenced Dimension 有涉及到SSAS模型的关系设置 但是本人的基于表格模型的 没有关系可 ...

  10. 网络基础 02_TCP/IP模型

    1 TCP/IP参考模型概述   2 应用层 3 传输层 3.1 传输控制协议(TCP) 面向连接 可靠传输 流控及窗口机制 使用TCP的应用: Web浏览器:电子邮件: 文件传输程序 3.2 用户数 ...