Ⅰ 存储过程的优缺点
存储过程的优缺点:
存储过程优点:
1.由于应用程序随着时间推移会不断更改,增删功能,T-sql过程代码会变得更复杂,StoredProcere为封装此代码提供了一个替换位置。
2.执行计划(存储过程在首次运行时将被编译,这将产生一个执行计划--
实际上是
Microsoft
SQL
Server为在存储过程中获取由
T-SQL
指定的结果而必须采取的步骤的记录。)缓存改善性能。
但sql
server新版本,执行计划已针对所有
T-SQL 批处理进行了缓存,而不管它们是否在存储过程中,所以没比较优势了。
3.存储过程可以用于降低网络流量,存储过程代码直接存储于数据库中,所以不会产生大量T-sql语句的代码流量。
4.使用存储过程使您能够增强对执行计划的重复使用,由此可以通过使用远程过程调用
(RPC)
处理服务器上的存储过程而提高性能。RPC
封装参数和调用服务器端过程的方式使引擎能够轻松地找到匹配的执行计划,并只需插入更新的参数值。
5.可维护性高,更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。
6.代码精简一致,一个存储过程可以用于应用程序代码的不同位置。
7.更好的版本控制,通过使用
Microsoft
Visual
SourceSafe
或某个其他源代码控制工具,您可以轻松地恢复到或引用旧版本的存储过程。
8.增强安全性:
a、通过向用户授予对存储过程(而不是基于表)的访问权限,它们可以提供对特定数据的访问;
b、提高代码安全,防止
SQL注入(但未彻底解决,例如,将数据操作语言--DML,附加到输入参数);
c、SqlParameter
类指定存储过程参数的数据类型,作为深层次防御性策略的一部分,可以验证用户提供的值类型(但也不是万无一失,还是应该传递至数据库前得到附加验证)。
存储过程缺点:
1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新
GetValue()
调用,等等,这时候估计比较繁琐了。
2.可移植性差
由于存储过程将应用程序绑定到
SQL
Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不特定于
RDBMS
的中间层中可能是一个更佳的选择。
3.
大量采用存储过程进行业务逻辑的开发致命的缺点是很多存储过程不支持面向对象的设计,无法采用面向对象的方式将业务逻辑进行封装,从而无法形成通用的可支持复用的业务逻辑框架。
4.代码可读性差,相当难维护.
Ⅱ sqlserver数据库 中写存储过程有什么好处:
存储过程(Stored Procere)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
简单来说 存储过程 可以同时执行 多条sql语句 而且存储过程要比通常的sql语句要快 可以向里面传进参数 和 传出参数
一个存储过程例子:
create procere UserInfo
@TitleName nvarchar(50),//串进参数
@Content nvarchar(Max),
@PostTime datetime(8),
@Username nvarchar(50),
@TitleID int output
as//sql语句集
declare @newid int
insert into Titles(Titlename,Username,PostTime) values(@TitleName,@Username,@PostTime)
select @newid=max(id) from Titles
insert into TieZiDetail(TitleID,Username,PostTime,Content) values(@newid,@Username,@PostTime,@Content)
select @TitleID=@newid
Ⅲ SQL中存储过程是干什么用的
存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
数据库存储过程的实质就是部署在数据库端的一组定义代码以及SQL。将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。
每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL Server所支持的数据类型都可使用。
(3)存储过程重新编译的作用扩展阅读:
SQL中存储过程优点:
1、重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。
2、减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
3、安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。
4、存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
Ⅳ 数据库系统原理 什么是存储过程有什么优点
存储过程也可以看成是函数的一种, 而且存储过程中的过程如果放到了开发 系统的 D 层的时候执行效果也是相同的。 存储过程是存储在数据库中的一个程序 块, 里面包含了自己定义的一段程序来实现相应的功能,比如要选择数据库的表 里面的记录,就可以使用下面的存储过程的框架:
这个实现的过程比较简单, 就是利用的是数据库自带的存储过程的模版,新 建存储过
程的时候就可以非常方便的实现自己所需要的功能。 存储过程中使用的 是数据库的语言, 跟其他的高级语言的用法相似,熟练的使用数据库的语言可以 加快开发的效率,技术也是很厉害的。 存储过程的到底有什么好处呢?一定要用存储过程吗? 存储过程的优点: 1.存储过程只在创造时进行编译,以后每次执行存储过 程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过 程可提高数据库执行速度。 2.当对数据库进行复杂操作时,可将此复杂操作用 存储过程封装起来与数据库提供的事务处理结合一起使用。更多数据库的知识, 尽在南京宝云官网。 3.存储过程可以重复使用,可减少数据库开发人员的工作量 4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。 存储过程有利于实现一系列的操作简化,提高系统的执行效率,而且放在存 储过程中的 SQL 语句是直接在数据库中编译过了的, 系统在执行的时候就可以减 少这部分代码的资源开销。 但是对于机房重构中,有时候我们只需要更新一个记录中的某一个字段的值, 这个时候用存储过程就有点不划算了,这个时候系统如 果不用存储过程直接用 SQL 语句来说,是比较方便的。所以存储过程并不是所有 的地方用都好,凡事都有一个合适的问题,一个度的问题。 可能有的人想存储过程这么有用,而且对系统的性能有提升,那就强迫症的 都去使用存储过程。 这里又有一个问题了,存储过程的作用主要是对数据库进行 操作, 那么学过数据库系统原理的我们就需要注意一个问题了,如何防止死锁? 毫无节制的使用存储过程, 而不考虑数据库结构是不科学的。对于相同的表进行 不同的操作,所产生的结果也是不一样的,产生的顺序也是不一样的,如何在存 储过程中进行有效的操作来使系统健康强壮,这是需要注意的。 通过使用存储过程, 可以更加清晰的理解数据库和系统是如何相互关联工作 的,存储过程的使用不仅是一种技术上的提升,更是思想上的一种启发,在今后 的开发工作中是否有相同的地方需要这样的抽象封装呢。 面对更多的重复出现的 封装,我们的工作也将更加高效、简洁。
Ⅳ 数据库存储过程是什么
问题一:sql数据库中的存储过程该怎么理解 有什么用啊? 存储过程是SQL 语句和流程控制语句的预编译 *** ,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。
问题二:数据库中什么是存储过程?作用是什么? 存储过程,就是带有名字的一个程序块。
存储,是指这个程序块创建了之后,是存储在数据库内部的,然后我们可以在自己写的程序中通过某种手段去调用这段程序,然后这段程序就会做一件事,做什么事?我们定义存储过程的时候怎么写的,它到时候就做什么;
过程,就是程序块,说白了就是一段程序。
存储过程,创建完成之后,就存储在数据库内部了,数据库帮你记着,存储过程创建的时候都有一个名字,将来你在你的程序当中,通过某种方式(不同编程语言有不同的方式),一般来讲通过这个名字,去调用存储过程,就像使用一个方法或者函数一样,它就去做一件事!
不同的数据库的存储过程,都是用当前自己这个数据库的编程语言来编写的,比如Oracle的PL/SQL编程,等等。
自己写一个就明白了,语法不用我多说了吧?
问题三:什么叫作数据库的存储过程? 存储过程就是将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,并且这样的语句是放在数据库中的,还可以根据条件执行不同SQL语句, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。 存储过程的优点 1.存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 2.经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作。当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。可以极大的提高数据库的使用效率,减少程序的执行时间,这一点在较大数据量的数据库的操作中是非常重要的。在代码上看,SQL语句和程序代码语句的分离,可以提高程序代码的可读性。 3.存储过程可以设置参数,可以根据传入参数的不同重复使用同一个存储过程,从而高效的提高代码的优化率和可读性。 4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权存储过程的种类: (1)系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作,如 sp_help就是取得指定对象的相关信息。 (2)扩展存储过程 以XP_开头,用来调用操作系统提供的功能exec master..xp_cmdshell 'ping 10.8.16.1' (3)用户自定义的存储过程,这是我们所指的存储过程常用格式 模版:Create procere procee_name [@parameter data_type][output][with]{repile|encryption} as sql_statement 解释:output:表示此参数是可传回的 with {repile|encryption} repile:表示每次执行此存储过程时都重新编译一次;encryption:所创建的存储过程的内容会被加密。
问题四:数据库中存储过程有什么主要作用,或都说它的主要用途? 存储过程的概念
存储过程(Stored Procere)是一组预先编绎好的Transact-SQL语句。将其放在服务器上,由用户通过指定存储过程的名字来执行它。存储过程可以作为一个独立的数据库对象,也可以作为一个单元被用户的应用程序调用。存储过程可以接收和输出参数,返回执行存储过程的状态值,还可以嵌套调用。
存储过程同其他编程语言中的过程(Procere)类似,主要体现在以下几个方面:
(1)存储过程可以接收参数,并以接收参数的形式返回多个参数给调用存储过程和批处理。
(2)包含执行数据库操作的编程语句,也可以调用其他的存储过程。
(3)向调用过程或批处理返回状态值,以反映存储过程的执行情况。
注意:存储过程跟函数不同,存储过程不能在被调用的位置上返回数据,也不能被应用在语句当中,例如不可以用类似“@Proc=存储过程名”的方式使用存储过程。但是,存储过程可以使用变量的形式来返回参数。
存储过程的优点表现在以下几个方面:
(1)执行速度快
存储过程在创建时就经过了语法检查和性能优化,因此在执行时不必再重复这些步骤。存储过程在第一次调用后,就驻留在内存中,不必再经过编译和优化,所以执行速度很快。在有大量批处理的Transact-SQL语句要重复执行的时候,使用存储过程可以极大地提高运行效率。
(2)模块化程序设计
只需创建存储过程一次,并将其存储在数据库中,可以在程序中多次调用该存储过程。用户可以独立于应用程序而对存储过程进行修改。
(3)减少网络通信量
存储过程中可以包含大量的Transact-SQL语句。在进行调用时,只需要使用一条语句就可以实现,而不需要在网络中发送数百行代码。
(4)保证系统的安全性
可以设置用户通过存储过程来对某些关键数据进行访问,但不允许用户直接使用Transact-SQL语句或企业管理器来对数据进行访问。
问题五:数据库存储过程和函数的区别 函数分两种,表值函数跟标量函数
表值函数最后要返回一个表变量,而标量函数最后要返回一个标量值
存储过程即一组批处理,可以返回或不返回值,仅仅是执行其内部的全部语句
函数可以与一般sql语句一同编写,而存储过程不可以,需要单独执行
问题六:数据库编辑存储过程是什么意思 一般来说,程序员都希望编写出来的程序能有最大化的应变能力,存储过程的最大作用是可以降低代码维护的工作量,很多需求的变化不用修改代码进而发布程序,而只需要调整一下存储过程即可实现
例如你打算开发一个报表,该报表会对数据库的数据进行一定程度的加工,然后再呈现给用户,那么你的实现方法有两个
1. 使用代码调用SQL,取到基础数据后,在程序代盯里面进行加工,并呈现给用户
2. 也可以编写一段存储过程,该存储过程先取基础数据,然后在存储过程里面进行数据加工,最后把最终的结果一次性的反馈给程序代码,程序代码只需要把执行完存储过程的结果呈现给用户即可
这两个方法都可以实现你想实现的功能,但是如果万一有一天需求变化了,用户需要呈现的结果中增加或者减少了部分内容,那么第一个方法就只能修改代码了,而第二个方法只需要调整存储过程即可实现
问题七:在SQL中存储过程的一般语法是什么? sql server存储过程语法
存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。
定义总是很抽象。存储过程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL Server)。如果我们通过创建存储过程以及在ASP中调用存储过程,就可以避免将SQL语句同ASP代码混杂在一起。这样做的好处至少有三个:
第一、大大提高效率。存储过程本身的执行速度非常快,而且,调用存储过程可以大大减少同数据库的交互次数。
第二、提高安全性。假如将SQL语句混合在ASP代码中,一旦代码失密,同时也就意味着库结构失密。
第三、有利于SQL语句的重用。
在ASP中,一般通过mand对象调用存储过程,根据不同情况,本文也介绍其它调用方法。为了方便说明,根据存储过程的输入输出,作以下简单分类:
1. 只返回单一记录集的存储过程
假设有以下存储过程(本文的目的不在于讲述T-SQL语法,所以存储过程只给出代码,不作说明):
/*SP1*/
CREATE PROCEDURE dbo.getUserList
as
set nocount on
begin
select * from dbo.[userinfo]
end
go
以上存储过程取得userinfo表中的所有记录,返回一个记录集。通过mand对象调用该存储过程的ASP代码如下:
'**通过mand对象调用存储过程**
DIM Mym,MyRst
Set Mym = Server.CreateObject(ADODB.mand)
Mym.ActiveConnection = MyConStr 'MyConStr是数据库连接字串
Mym.mandText = getUserList '指定存储过程名
Mym.mandType = 4 '表明这是一个存储过程
Mym.Prepared = true '要求将SQL命令先行编译
Set MyRst = Mym.Execute
Set Mym = Nothing
存储哗程取得的记录集赋给MyRst,接下来,可以对MyRst进行操作。
在以上代码中,mandType属性表明请求的类型,取值及说明如下:
-1 表明mandText参数的类型无法确定
1 表明mandText是一般的命令类型
2 表明mandText参数是一个存在的表名称
4 表明mandText参数是一个存储过程的名称
还可以通过Connection对象或Recordset对象调用存储过程,方法分别如下:
'**通过Connection对象调用存储过程**
DIM MyConn,MyRst
Set MyConn = Server.CreateObject(&qu......>>
问题八:T-SQL和存储过程有什么区别 20分 区别T-SQL是语言,存储过程是数据库一种对象
T-SQL 即 Transact-SQL,是 SQL 在 Microsoft SQL Server 上的增强版,它是用来让应用程式与 SQL Server 沟通的主要语言。
Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。
? 存储过程的概念
存储过程Procere是一组为了完成特定功能的SQL语句 *** ,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。
存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。
由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。同时由于在调用时只需用提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量、简单网络负担。
问题九:数据库存储过程怎么调用存储过程 在存储过程里用exec执行另一存储过程名及它需要的参数就可以了
如 exec abc '1', '2' (abc 是存储过程的名字, '1','2' 是它的参数)
Ⅵ oracle中的存储过程,有什么作用
定义:存储过程(Stored Procere )是一组为了完成特定功能的SQL 语句
集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数
(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要
对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后
存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE 中,
若干个有联系的过程可以组合在一起构成程序包。
优点:存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某用户才具有对指定存储过程的使用权。
你还是给我点分啥,写得我手都酸痛了。
Ⅶ 存储过程作用是什么,优缺点以及适用范围是什么
中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快。 存储过程的优点: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。 3.存储过程可以重复使用,可减少数据库开发人员的工作量 4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权 缺点:1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。
2.可移植性差
由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。 优点: 1.由于应用程序随着时间推移会不断更改,增删功能,T-SQL过程代码会变得更复杂,StoredProcere为封装此代码提供了一个替换位置。 2.执行计划(存储过程在首次运行时将被编译,这将产生一个执行计划-- 实际上是 Microsoft SQL Server为在存储过程中获取由 T-SQL 指定的结果而必须采取的步骤的记录。)缓存改善性能。 ........但sql server新版本,执行计划已针对所有 T-SQL 批处理进行了缓存,而不管它们是否在存储过程中,所以没比较优势了。 3.存储过程可以用于降低网络流量,存储过程代码直接存储于数据库中,所以不会产生大量T-sql语句的代码流量。 4.使用存储过程使您能够增强对执行计划的重复使用,由此可以通过使用远程过程调用 (RPC) 处理服务器上的存储过程而提高性能。RPC 封装参数和调用服务器端过程的方式使引擎能够轻松地找到匹配的执行计划,并只需插入更新的参数值。 5.可维护性高,更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。 6.代码精简一致,一个存储过程可以用于应用程序代码的不同位置。 7.更好的版本控制,通过使用 Microsoft Visual SourceSafe 或某个其他源代码控制工具,您可以轻松地恢复到或引用旧版本的存储过程。 8.增强安全性: a、通过向用户授予对存储过程(而不是基于表)的访问权限,它们可以提供对特定数据的访问; b、提高代码安全,防止 SQL注入(但未彻底解决,例如,将数据操作语言--DML,附加到输入参数); c、SqlParameter 类指定存储过程参数的数据类型,作为深层次防御性策略的一部分,可以验证用户提供的值类型(但也不是万无一失,还是应该传递至数据库前得到附加验证)。 缺点: 1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。 2.可移植性差 由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。
Ⅷ sqlserver
摘自:http://database.ctocio.com.cn/analysis/465/7709465.shtml
【IT专家网独家】SQL Server用户自定义函数和存储过程有类似的功能,都可以创建捆绑SQL语句,存储在server中供以后使用。这样能够极大地提高工作效率,通过以下的各种做法可以减少编程所需的时间:
重复使用编程代码,减少编程开发时间。
隐藏SQL细节,把SQL繁琐的工作留给数据库开发人员,而程序开发员则集中处理高级编程语言。
维修集中化,可以在一个地方做业务上的逻辑修改,然后让这些修改自动应用到所有相关程序中。
乍看之下,用户自定义函数和存储过程的功能似乎一摸一样。但是,其实这两者之间还有一些虽然细微但是很重要的差异:
存储过程是使用EXEC命令独立调用的,而用户自定义函数是在另一个SQL语句中调用的。
l存储程序是允许用户和程序去使用存储过程,而不是允许其存取表格,这样能够增强程序安全性。与标准的SQL Server相比,存储程序限制用户行动权限方面更为细化。例如,如果你有一个货存表格,每次卖出一个货物收银员都要对表格进行更新一次(从货存中把该货品减去一件)。你可以给收银员设置权限,允许其使用decrement_item存储过程,而不是允许他们有任意修改或村表格的权限。
函数必须始终返回一个值(一个标量值或一个表格)。而存储过程可以返回一个标量值、一个表值或无需返回值。
总而言之,存储程序对SQL Server开发员来说是最有价值的宝物之一,用于数据库中,能够大大的提高工作效率,增强安全性,绝对超值。