SQL Server存储过程
创建于2016-12-24 16:12:19
存储过程
概念:
1.存储过程是在数据库管理系统中保存的、预先编译的、能实现某种功能的SQL程序,它是数据库应用中运用比较广泛的
一种数据对象。
2.存储过程是SQL语句和控制语句的预编译集合,保存在数据库里可由应用程序调用执行,而且允许用户声明变量、逻辑
控制语句及其他强大的编程功能。
3.存储过程可包含逻辑控制语句和数据操作语句,它可以接收参数、输出参数、返回单个或多个结果集及返回值。
4.存储过程可以只包含一条select语句,也可以包含一系列使用控制流的SQL语句。存储过程可以包含个别或全部的控制
流语句。
特点:
1.模块化程序设计:
只需创建一次存储过程并将其存储在数据库中,以后即可在程序中反复调用该存储过程。
2.执行速度快,效率高:
如果某操作需要大量的T-SQL代码或需要重复执行,则存储过程将比T-SQL批处理代码的执行速度更快。因为存储
过程只在创建的时候编译一次,而批处理代码每次执行的时候都需要编译。
3.减少网络流量:
使用存储过程后,一个需要数百行T-SQL代码的操作,由一条执行过程代码的单独语句即可实现,而不需要再网络
中发送数百行代码。
4.具有良好的安全性:
即使对于没有直接执行存储过程中语句的权限的用户,也可授予他们执行该存储过程的权限。不同的用户使用不同
的存储过程。
5.存储过程分为两类:
系统存储过程和用户自定义的存储过程
系统存储过程
概括:SQL Server提供系统存储过程,它们是一组预编译的T-SQL语句。系统存储过程提供了管理数据库和更新表的机制,并
充当从系统表中检索信息的快捷方式。
常用的系统存储过程:
SQL Server的系统存储过程的名称以“sp_”开头,并存放在Resource数据库中。下面列出一些常用的系统存储过程↓
| 系统存储过程 | 说明 |
| sp_databases | 列出服务器上的所有数据库信息,包括数据库名称和数据库大小 |
| sp_ helpdb | 报告有关指定数据库或所有数据库的信息 |
| sp_renamedb | 更改数据库的名称 |
| sp_ tables | 返回当前环境下可查询的表或视图的信息 |
| sp_ columns | 返回某个表或视图的列信息,包括列的数据类型和长度等 |
| sp_help | 查看某个数据库对象的信息,如列名、主键、约束、外键、索引等 |
| sp_helpconstraint | 查看某个表的约束 |
| sp_helpindex | 查看某个表的索引 |
| sp_stored_procedures | 显示存储过程的列表 |
| sp_password | 添加或修改登录账户的密码 |
| sp_helptext | 显示默认值、未加密的存储过程、用户定义的存储过程、 触发器和视图的实际文本 |
调用执行存储过程:
语法: exec[ute] [返回变量=] 存储过程名
[@参数1=]参数值1 [output] | [default],
......,
[@参数n=]参数值n [output] | [default]
其中,exec是execute的简写
如果执行存储过程的语句时批处理中的第一个语句,则可以省略execute关键字。
如果有返回值的话,可以用一个变量接收。但是在存储过程内return只能返回数值类型。
output表明参数是输出参数,default表示参数的默认值。
如果不按照参数顺序传递参数值,则要指定参数名。
一旦某个参数按照"@参数名=参数值"格式传递数据,那么该参数之后的其他参数都必须以同样的格式传递参数
值。
常用的扩展存储过程:
扩展存储过程是SQL Server提供的各类系统存储过程中的一类,允许使用其他编程语言创建外部存储过程,为数据库用
户提供从SQL Server实例到外部程序的接口,以便进行各种维护活动。通常以"xp_"作为前缀,以DLL形式单独存在。
语法: exec xp_cmdshell DOS命令 [no_output]
其中,exec表示调用存储过程,no_output为可选参数,设置执行DOS命令后是否输出返回信息。
用户自定义的存储过程
组成:
1.输入参数和输出参数。
2.在存储过程中执行的T-SQL语句。
3.存储过程的返回值。
语法:
1.创建语法:
create proc[edure] 存储过程名
[{@参数1 数据类型} [=默认值] [output],
......,
{@参数n 数据类型} [=默认值] [output]
]
as
SQL语句
2.删除语法:
drop proc[edure] 存储过程名
3.判断存储过程是否存在,如果存在,则删除
if exists(select * from sysobjects where name = 存储过程名)
drop proc[edure] 存储过程名
go
语法释义:
1.创建:
proc是procedure的简写,参数的默认值可选,不写则没有默认值,调用执行时必须带有此参数。output
表示是输出参数,即执行存储过程后把返回值存放在输出参数中。就像C#中的引用传递一样。输出参数也
可以设置默认值。不写output则为输入参数,就像C#中的值传递一样。
另外需注意,存储过程中参数的默认值不能是系统函数。比如参数是时间类型,默认值不能是
GETDATE()
处理错误信息
概念:在存储过程中,可以使用print语句显式用户定义的错误信息,但这些是临时的,并不保存错误信息。使用raiserror语句
可以指定严重级别并设置系统变量记录所发生的错误。
raiserror语句:
语法:
raiserror ({msg_id | msg_str} {, severity, state} [with option [...n]])
语法释义:
msg_id: 在sysmessages系统表中指定的用户定义错误信息。
msg_str: 用户定义的特定信息,最长为255个字符。
severity: 与特定信息关联,表示用户定义的严重性级别。用户可使用的级别为0~18级;19~25级是
为sysadmin固定角色的成员预留的,并且需要指定with log选项;20~25级被认为是致命
错误。
state: 表示错误的状态,是1~255中的值。
option: 错误的自定义选项,可以是下列任一值
a. log: 在Microsoft SQL Server数据库引擎实例的错误日志和应用程序日志中记
录错误。
b. nowait: 将消息立即发送给客户端。
c. seterror: 将@@error值和error_nummber值设置为msg_id或50000,不用考虑
严重级别。
SQL Server存储过程的更多相关文章
- SQL Server存储过程中使用表值作为输入参数示例
这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...
- SQL Server存储过程Return、output参数及使用技巧
SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...
- SQL Server 存储过程(转载)
SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这 ...
- 14、SQL Server 存储过程
SQL Server 存储过程 存储过程类似函数,可以重复使用.相对于函数,存储过程拥有更强大的功能和更高的灵活性. 存储过程中可以包含逻辑控制语句和数据操作语句,可以接受参数,输出参数,返回单个值或 ...
- (摘录)SQL Server 存储过程
文章摘录:http://www.cnblogs.com/hoojo/archive/2011/07/19/2110862.html SQL Server 存储过程 Transact-SQL中的存储过程 ...
- Sql Server 存储过程中查询数据无法使用 Union(All)
原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正 ...
- Yii2.0调用sql server存储过程并获取返回值
1.首先展示创建sql server存储过程的语句,创建一个简单的存储过程,测试用. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE P ...
- C# 调用存储过程 Sql Server存储过程 存储过程报错,程序中的try
C#程序调用Sql Server存储过程,存储过程中报错情况,返回值... 0.SQL存储过程 USE [Opos] GO /****** Object: StoredProcedure [dbo]. ...
- sql server 存储过程使用游标记录
sql server 存储过程使用游标记录--方便下次参考使用 游标的组成: 声明游标 打卡游标 从一个游标中查找信息 关闭游标 释放游标 游标类型: 静态游标 动态游标 只进游标 键集驱动游标 静态 ...
- SQL Server存储过程输入参数使用表值
转载自:http://blog.csdn.net/smithliu328/article/details/9996149 在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使 ...
随机推荐
- 【.net 深呼吸】细说CodeDom(3):命名空间
在上一篇文章中,老周介绍了表达式和语句,尽管老周没有把所有的内容都讲一遍,但相信大伙至少已经掌握基本用法.在本文中,咱们继续探讨 CodeDom 方面的奥秘,这一次咱们聊聊命名空间. 在开始之前,老周 ...
- canvas与html5实现视频截图功能
这段时间一直在研究canvas,突发奇想想做一个可以截屏视频的功能,然后把图片拉去做表情包,哈哈哈哈哈哈~~ 制作方法: 1.在页面中加载视频 在使用canvas制作这个截图功能时,首先必须保证页面上 ...
- Div Vertical Menu ver5
这个小功能,如果是算此次,已经是第5次修改了.可以从这里看到前4次:V1, http://www.cnblogs.com/insus/archive/2011/10/17/2215637.html V ...
- Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
学习架构探险,从零开始写Java Web框架时,在学习到springAOP时遇到一个异常: "C:\Program Files\Java\jdk1.7.0_40\bin\java" ...
- interpreter(解释器模式)
一.引子 其实没有什么好的例子引入解释器模式,因为它描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中:在实际应用中,我们可能很少碰到去构造一个语言的文法的情况. 虽然你几乎用 ...
- Maven搭建SpringMVC+Hibernate项目详解 【转】
前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...
- 通过sails和阿里大于实现短信验证
通过sails与阿里大于来实现注册短信验证码的发送,逻辑图如下 1.用户在客户端发送手机号给服务器,服务器接收到手机号,生成对应时间戳,随机四位数验证码 2.服务器将电话号码和验证码告诉阿里大于服务器 ...
- SharePoint2016安装的过程的”Microsoft.SharePoint.Upgrade.SPUpgradeException”错误解决方法
前提 在windows server 2012的服务器上运行安装sharepoint2016出现如下错误: Could not load file or assembly ‘Microsoft.Dat ...
- Android—万能ListView适配器
ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义. 最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家. 首先有一个自定义的 ...
- iOS开发--ChildViewController实现订单页的切换
先不说废话, 上效果图, 代码量也不大, 也不上传github骗星星了, 你们复制粘贴下代码, 就可以轻而易举的弄出一个小demo. 这个代码的实现并不复杂, 甚至于说非常简单, 就是逻辑有点小绕, ...