存储过程包含
㈠ 存储过程到底是什么!
在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是sql 语句和流程控制语句的集合。就
本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。sql server 2000 不仅提供了用户自定义存储过程的功能,而且也提供了许多可作为工具使用的系统存储过程。
12.1.1 存储过程的概念
存储过程(stored procere)是一组为了完成特定功能的sql 语句集,经编译后存储在数据库。中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
在sql server 的系列版本中存储过程分为两类:系统提供的存储过程和用户自定义存储过程。系统过程主要存储在master 数据库中并以sp_为前缀,并且系统存储过程主要是从系统表中获取信息,从而为系统管理员管理sql server 提供支持。通过系统存储过程,ms sql server 中的许多管理性或信息性的活动(如了解数据库对象、数据库信息)都可以被顺利有效地完成。尽管这些系统存储过程被放在master 数据库中,但是仍可以在其它数据库中对其进行调用,在调用时不必在存储过程名前加上数据库名。而且当创建一个新数据库时,一些系统存储过程会在新数据库中被自动创建。用户自定义存储过程是由用户创建并能完成某一特定功能(如查询用户所需数据信息)的存储过程。在本章中所涉及到的存储过程主要是指用户自定义存储过程。
12.1.2 存储过程的优点
当利用ms sql server 创建一个应用程序时,transaction-sql 是一种主要的编程语言。若运用transaction-sql 来进行编程,有两种方法。其一是,在本地存储transaction- sql 程序,并创建应用程序向sql server 发送命令来对结果进行处理。其二是,可以把部分用transaction-sql 编写的程序作为存储过程存储在sql server 中,并创建应用程序来调用存储过程,对数据结果进行处理存储过程能够通过接收参数向调用者返回结果集,结果集的格式由调用者确定;返回状态值给调用者,指明调用是成功或是失败;包括针对数据库的操作语句,并且可以在一个存储过程中调用另一存储过程。
我们通常更偏爱于使用第二种方法,即在sql server 中使用存储过程而不是在客户计算机上调用transaction-sql 编写的一段程序,原因在于存储过程具有以下优点:
(1) 存储过程允许标准组件式编程
存储过程在被创建以后可以在程序中被多次调用,而不必重新编写该存储过程的sql 语句。而且数据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响(因为应用程序源代码只包含存储过程的调用语句),从而极大地提高了程序的可移植性。
(2) 存储过程能够实现较快的执行速度
如果某一操作包含大量的transaction-sql 代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的执行计划。而批处理的transaction- sql 语句在每次运行时都要进行编译和优化,因此速度相对要慢一些。
(3) 存储过程能够减少网络流量
对于同一个针对数据数据库对象的操作(如查询、修改),如果这一操作所涉及到的 transaction-sql 语句被组织成一存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,否则将是多条sql 语句,从而大大增加了网络流量,降低网络负载。
(4) 存储过程可被作为一种安全机制来充分利用
系统管理员通过对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访问权限的限制,避免非授权用户对数据的访问,保证数据的安全。(我们将在14 章“sqlserver 的用户和安全性管理”中对存储过程的这一应用作更为清晰的介绍)
注意:存储过程虽然既有参数又有返回值,但是它与函数不同。存储过程的返回值只是指明执行是否成功,并且它不能像函数那样被直接调用,也就是在调用存储过程时,在存储过程名字前一定要有exec保留字(如何执行存储过程见本章下一字)。
㈡ 数据库储存过程有哪些种类
一个存储过程既是一个系统的标准组件,也是一个可编程的函数,它在数据库中创建并保存,总体来说关系数据库系统中存在如下几大类型存储过程。
1.系统存储过程系统存储过程以sp_开头,用来进行系统的各项设定,取得系统的各项信息,管理系统的各项相关工作。
2.本地存储过程本地存储过程由用户创建,是为了完成某一特定功能的SQL语句集。事实上,一般所说的存储过程就是指本地存储过程。
3.临时存储过程临时存储过程分为本地临时存储过程、全局临时存储过程两种。
((1)本地临时存储过程。以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它。
(2)全局临时存储过程。以两个井字号(##)开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程。全局临时存储过程一旦创建,以后连接到服务器的任意用户都可以执行它,而且不需要特定的权限。
4.远程存储过程在特定数据库中,远程存储过程是位于远程服务器上的存储过程,通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。
5.扩展存储过程扩展存储过程是用户使用外部程序语言编写的存储过程,扩展存储过程的名称通常以xp_开头。
㈢ 什么是数据库存储过程
存储过程(Stored Procere)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。
这类语言主要提供以下功能,让用户可以设计出符合应用需求的程序:
1、变量说明
2、ANSI(美国国家标准化组织)兼容的SQL命令(如Select,Update….)
3、一般流程控制命令(if…else…、while….)
4、内部函数
(3)存储过程包含扩展阅读:
种类
1、系统存储过程
2、本地存储过程
3、临时存储过程
4、远程存储过程
5、扩展存储过程
㈣ 存储过程的定义
Microsoft SQL Server 中的存储过程与其他编程语言中的过程类似,原因是存储过程可以:
接受输入参数并以输出参数的格式向调用过程或批处理返回多个值。
包含用于在数据库中执行操作(包括调用其他过程)的编程语句。
向调用过程或批处理返回状态值,以指明成功或失败(以及失败的原因)。
可以使用 Transact-SQL EXECUTE 语句来运行存储过程。存储过程与函数不同,因为存储过程不返回取代其名称的值,也不能直接在表达式中使用。
在 SQL Server 中使用存储过程而不使用存储在客户端计算机本地的 Transact-SQL 程序的好处包括:
存储过程已在服务器注册。
存储过程具有安全特性(例如权限)和所有权链接,以及可以附加到它们的证书。
用户可以被授予权限来执行存储过程而不必直接对存储过程中引用的对象具有权限。
存储过程可以强制应用程序的安全性。
参数化存储过程有助于保护应用程序不受 SQL Injection 攻击。有关详细信息,请参阅 SQL Injection。
存储过程允许模块化程序设计。
存储过程一旦创建,以后即可在程序中调用任意多次。这可以改进应用程序的可维护性,并允许应用程序统一访问数据库。
存储过程是命名代码,允许延迟绑定。
这提供了一个用于简单代码演变的间接级别。
存储过程可以减少网络通信流量。
㈤ 啥叫“存储过程”啊
存储过程
存储过程是保存在数据库中的专门进行数据操作的代码过程。存储过程通常与触发器结合使用,来控制数据的完整性。在打开数据库时,存储过程被自动加载到内存中,可以象其他过程文件一样进行调用。
1.建立存储过程
可以在项目管理器中选择建立或修改存储过程。在项目管理器的Data选项卡中选定Stored Proceres节点,然后单击New、Add或Modify按钮都将打开存储过程文本编辑器,如图7-12所示。
也可以在首先打开数据库的情况下,执行MODIFY STRUCTURE命令打开存储过程文本编辑器。如:
OPEN DATABASE dbMyData
MODIFY STRUCTURE
一个数据库的所有存储过程包含在一个文件中,过程使用PROCEDURE语句声明,这与一般的过程文件是完全一样的。
例如,下面为数据库建立了一个名为NewStuId的存储过程,该过程为学生档案表的StuId字段根据当前StuId中的最大值自动生成一个编号,并保存到StuId字段中中,如图7-13所示。
图7-12 可以在项目管理器选择建立或修改存储过程
图7-13 NewStuId存储过程
执行下面的代码,将在学生档案表中添加一条新记录,并为StuId字段赋值。
APPEND BLANK
NewStuId() &&执行存储过程
需要注意的是,如果准备存储过程用于表的触发器,则不能包含如图7-13中所示的CALCULATE、GO和REPLACE这些引起记录移动的命令。
2.从文本文件中导入存储过程
可以使用APPEND PROCEDURES命令将文本文件中的存储过程以编程的方式添加到当前数据库中,其语法格式如下:
APPEND PROCEDURES FROM FileName [AS nCodePage] [OVERWRITE]
其中,FileName指定保存存储过程的文本文件名称;AS nCodePage指定要追加其存储过程的文本文件要转换的代码页;OVERWRITE指定用文本文件中的过程改写数据库中的当前存储过程,如果不包含此参数,文本文件中的存储过程将追加到当前存储过程中。
需要注意的是,在使用该命令前,数据库必须以独占方式打开并设置为当前数据库。
3.将存储过程导出到文本文件中
可以使用COPY PROCEDURES命令将当前数据库中的存储过程导出到文本文件,其语法格式如下:
COPY PROCEDURES TO FileName [AS nCodePage] [ADDITIVE]
其中,FileName指定文本文件名,存储过程将被复制到此文本文件中;AS nCodePage指定文本文件的代码页;ADDITIVE指定将存储过程追加到指定文本文件尾,如果若省略该参数,则覆盖文本文件的内容。
4.查看数据库中的存储过程
可以使用DISPLAY PROCEDURES或LIST PROCEDURES命令显示当前数据库中的存储过程名称,二者的功能基本相同。其中,DISPLAY PROCEDURES命令的语法格式如下:
DISPLAY PROCEDURES [TO PRINTER [PROMPT] | TO FILE FileName] [NOCONSOLE]
其中,TO PRINTER [PROMPT]指定将显示结果输出到打印机中,包含PROMPT子句可以在打印开始前显示一个打印对话框;TO FILE FileName指定将显示结果输出到FileName指定的文件中;NOCONSOLE指定不向Visual FoxPro主窗口或活动的用户自定义窗口输出。
例如,下面的代码将显示dbMyData数据库中的存储过程名称。
OPEN DATABASE dbMyData
DISPLAY PROCEDURES
7.3.6 设置触发器
触发器是绑定在表上的表达式,当表中的任何记录被指定的操作命令修改时,触发器被激发。当数据修改时,触发器可执行数据库应用程序要求的任何其他操作。
触发器作为特定表的属性来创建和存储。如果从数据库中移去一个表,则同时删除和该表相关联的触发器。从前面的表7-7可以看出,触发器是在进行了其他所有检查之后(如有效性规则、主关键字的实施,以及NULL值的实施)被激活,位于所有约束的最后面。并且与字段级规则和记录级规则不同,触发器不对缓冲数据起作用。
1.建立触发器
可以使用表设计器或CREATE TRIGGER命令来创建触发器。对于每个表,可为插入、更新及删除3个事件各创建一个触发器。在任何情况下,一个表最多只能有3个触发器。触发器必须返回“真”(.T.)或“假”(.F.),只有返回“真”时操作才能继续进行。能够激发触发器的命令如表7-9所示。
表7-9 能够激发触发器的命令
触发器
命令
删除触发器
DELETE命令
插入触发器
APPEND FROM、APPEND FROM ARRAY、APPEND BLANK、IMPORT、INSERT-SQL和RECALL命令
序表
触发器
命令
更新触发器
GATHER、REPLACE、REPLACE FROM ARRAY和UPDATE SQL命令
需要注意的是,不能对有触发器的表使用INSERT命令,但是可以使用INSERT-SQL命令;发出PACK或ZAP不会激发任何触发器;如果更新具有删除标记的记录,不会激发触发器;如果表使用了缓冲模式,只有当使用TABLEUPDATE( )函数进行发送更新时,才激发更新触发器。
下面是在dbMyData数据库中建立的4个存储过程。其中,InsertData用于在添加记录时显示一个“新增记录…”提示;UpdateData用于在记录更新时自动将更新记录写入到一个日志表tblStudent2中,来记录用户对学生档案表所做的修改;DeleteData用于在删除记录时显示一个信息框,询问用户是否确认删除记录;WriteLog用于写入日志,该过程可以接收来自UpdateData过程的参数传入值。
PROCEDURE WriteLog
PARAMETERS lcStuId,lcStuName,lcClassName,ldEnterDate,lnChinese,lnMaths,lnTotal
*!* 将变动写入到日志表tblStuden2中
INSERT INTO tblStudent2 (StuId,StuName,ClassName,EnterDate,Chinese,Maths,Total) ;
VALUES (lcStuId,lcStuName,lcClassName,ldEnterDate,lnChinese,lnMaths,lnTotal)
PROCEDURE InsertData
WAIT WINDOW "新增记录..." NOWAIT TIMEOUT 2
RETURN .T.
PROCEDURE UpdateData
WAIT WINDOW "正在将变动写入日志表..." NOWAIT TIMEOUT 2
WriteLog(StuId,StuName,ClassName,EnterDate,Chinese,Maths,Total)
RETURN .T.
PROCEDURE DeleteData
IF MESSAGEBOX("确认删除该记录吗?",4+32," 提示")=6
RETURN .T.
ELSE
RETURN .F.
ENDIF
打开表设计器,在Table选项卡的Insert trigger、Update trigger和Delete trigger文本框中分别输入InsertData()、UpdateData()和DeleteData(),如图7-14所示。
图7-14 为表建立触发器
也可以使用CREATE TRIGGER命令为表建立触发器表达式,该命令的语法格式如下:
CREATE TRIGGER ON TableName FOR DELETE | INSERT | UPDATE AS lExpression
其中,TableName是要建立触发器的表名称,lExpression是触发器表达式。例如,下面使用该命令为学生档案表建立了与图7-14同样的触发器表达式。
OPEN DATABASE dbMyData
CREATE TRIGGER ON 学生档案表 FOR INSERT AS InsertData() &&建立插入触发器
CREATE TRIGGER ON 学生档案表 FOR UPDATE AS UpdateData() &&建立更新触发器
CREATE TRIGGER ON 学生档案表 FOR DELETE AS DeleteData() &&建立删除触发器
2.删除触发器
可以在表设计器的Table选项卡中删除触发器或使用DELETE TRIGGER命令从数据库表中删除触发器。其中,DELETE TRIGGER命令的语法格式如下:
DELETE TRIGGER ON TableName FOR DELETE | INSERT | UPDATE
其中,TableName是要删除触发器的表名称。
例如,下面的代码将删除学生档案表中的插入触发器。
DELETE TRIGGER ON 学生档案表 FOR INSERT
3.修改触发器
可以在表设计器的Table选项卡中或者使用CREATE TRIGGER命令来修改触发器。使用命令修改触发器与建立触发器时相同。
㈥ 数据库原理-存储过程的类型有哪些分别有什么特征。
(3).存储过程分类<1>.系统存储过程系统存储过程(System
Stored
Proceres)主要存储在master数据库中,并以sp_为前缀,并且系统存储过程主要是从系统表中获取信息,从而为系统管理员管理SQL
Server提供支持。<2>.本地存储过程本地存储过程(Local
Stored
Proceres)也就是用户自行创建在用户数据库中的存储过程。事实上一般所说的存储过程值得就是本地存储过程。用户创建的存储过程是由用户创建并能完成某一特定功能(如查询用户所需的数据信息)的存储过程。<3>.临时存储过程临时存储过程(Temporary
Stored
Proceres)可分为以下两种:A.本地临时存储过程如果在创建存储过程中,以井号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程(例如,CREATE
PROCEDURE
#book_proc.....)。本地临时存储过程只有创建它的连接的用户才能够执行它,而且一旦这位用户断开与SQL
Server的连接,本地临时存储过程就会自动删除,当然,这位用户也可以在连接期间用DROP
PROCEDURE命令删除多创建的本地临时存储过程。B.全局临时存储过程如果在所创建的存储过程名称是以两个井号(#
#)开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,如果没有,便立即将全局临时存储过程删除;如果有,SQL
Server会让这些执行中的操作继续进行,但是不允许任何用户再执行全局临时存储过程,等到所有未完成的操作执行完毕后,全局临时存储过程就会自动删除。由于全局临时存储过程能够被所有的连接用户使用,因此,必须注意其名称不能和其他连接所采用的名称相同。<4>.远程存储过程远程存储过程(Remote
Stored
Proceres)是位于远程服务器上的存储过程,通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。
㈦ sql sever 的系统存储过程包括那些
sqlserver许多管理和信息活动可以通过系统存储过程执行。系统存储过程按这些分类分组
主要有SP开头和XP开头两种类型。具体的作用如下
sp开头的一般是Active
Directory
过程、目录过程、游标过程、数据库维护计划过程、分布式查询过程、全文检索过程、日志传送过程、OLE
自动化扩展存储过程、复制过程、安全过程、SQL
事件探查器过程、SQL
Server
代理程序过程、系统过程、Web
助手过程、XML
过程
xp开头的是常规扩展过程、SQL
Server
代理程序过程
不知道楼主看明白了,如果有什么明天可以补充问题。
㈧ 存储过程在数据库中的作用是什么
第一:存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。
第二:存储过程可接受参数、输出参数、返回单个或多个结果集及返回值。向程序返回错误原因。
第三:存储过程运行比较稳定,不会有太多的错误。只要一次成功,以后都会按这个程序运行。
第四:存储过程主要是在服务器上运行,减少对客户机的压力。
第五:存储过程可以包含程序流、逻辑以及对数据库的查询。同时可以实体封装和隐藏数据逻辑。
第六:存储过程可以在单个存储过程中执行一系列SQL语句。
第七:存储过程可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
(8)存储过程包含扩展阅读:
存储过程的优点:
1、存储过程的能力大大增强了SQL语言的功能和灵活性。
2、可保证数据的安全性和完整性。
3、通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。
4、通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。
5、在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。
6、可以降低网络的通信量。
7、使体现企业规则的运算程序放入数据库服务器中,以便集中控制。
㈨ sql查询数据库中哪些存储过程包含指定字符串
selectb.name,a.text
fromdbo.syscommentsaleftjoindbo.sysobjectsb
ona.id=b.idwhereb.xtype='p'anda.textlike'%存储过程内容%';
请采用以上sql脚本
㈩ 什么是存储过程有什么优点
存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。
优点:
1、重复使用:存储过程可以重复使用,从而可以减少数据库开发人员的工作量。
2、减少网络流量:存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
3、安全性:参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。
(10)存储过程包含扩展阅读:
存储过程的缺点:
1、更改比较繁琐:如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐。
2、可移植性差:由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。如果应用程序的可移植性在您的环境中非常重要,则需要将业务逻辑封装在不特定于 RDBMS 的中间层中。