精华内容
下载资源
问答
  • 标签:答:存储过程优缺点:优点:1.由于应用程序随着时间推移会不断更改,增删功能,T-SQL过程代码会变得更复杂,StoredProcedure为封装此代码提供了一个替换位置。2.执行计划(存储过程在首次运行时将被编译,这...

    标签:

    答:

    存储过程的优缺点:

    优点:

    1.由于应用程序随着时间推移会不断更改,增删功能,T-SQL过程代码会变得更复杂,StoredProcedure为封装此代码提供了一个替换位置。

    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 的中间层中可能是一个更佳的选择。

    Sql语句灵活,可移植性强,查询速度比存储过程慢些

    标签:

    展开全文
  • 答:存储过程优缺点: 优点: 1.由于应用程序随着时间推移会不断更改,增删功能,T-SQL过程代码会变得更复杂,StoredProcedure为封装此代码提供了一个替换位置。 2.执行计划(存储过程在首次运行时将被编译,...

    http://3871584.blog.163.com/blog/static/33526564201232501919316/

    答:存储过程的优缺点:

    优点:
    1.由于应用程序随着时间推移会不断更改,增删功能,T-SQL过程代码会变得更复杂,StoredProcedure为封装此代码提供了一个替换位置。
    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 的中间层中可能是一个更佳的选择。
    Sql语句灵活,可移植性强,查询速度比存储过程慢些
    展开全文
  • 存储过程包含逻辑控制语句数据操纵语句 可以接受参数,输出参数 ,返回单个或多个结果集以及返回值。 2.优缺点 优点 1.由于应用程序随着时间推移会不断更改 , 增删功能 , SQL 语句会变得更复杂 , 存储过程为封装...

    sql存储过程
    数据库编程过程中经常会用到存储过程,相比平常的sql语句,存储过程 更 方便,快速,安全
    1.概念:
    存储过程是一组 为了完成特定功能的 sql 语句集,存储在数据库中并只需要创建时编译(所以存储过程运行更快),用户通过指定存储过程的名字并给出参数 来执行它。
    存储过程包含逻辑控制语句和数据操纵语句
    可以接受参数,输出参数 ,返回单个或多个结果集以及返回值。
    2.优缺点
    优点
    1.由于应用程序随着时间推移会不断更改 , 增删功能 , SQL 语句会变得更复杂 , 存储过程为封装此类代码提供了一个替换位置 ;
    2.由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中 , 所以存储过程运行要比单个的 SQL 语句块要快 ;
    3.可维护性高 , 更新存储过程通常比更改 , 测试以及重新部署程序集需要较少的时间和精力 ;
    4.代码精简一致 , 一个存储过程可以用于应用程序代码的不同位置 ;
    5.增强安全性 :通过向用户****授予对存储过程** (而不是基于表) 的访问权限** , 它们可以提供对特定数据的访问 ;
    6.提高代码安全 , 防止 SQL注入 (但未彻底解决 , 例如将数据操作语言 DML 附加到输入参数) ;
    缺点:
    1.如果更改范围大到需要对输入存储过程的参数进行更改 , 或者要更改由其返回的数据 , 则仍需要更新程序集中的代码以添加参数 , 等等 ;
    2**.可移植性差 ,** 由于存储过程将应用程序绑定到 Server , 因此使用存储过程封装业务逻辑将限制应用程序的可移植性 ; 如果应用程序的可移植性在您的环境中非常重要 , 则将业务逻辑封装在不特定于 RDBMS 的中间层中可能是一个更佳的选择 ;

    3.编写简单存储过程
    创建存储过程

    create procedure Getusers()
    begin
         select * from user;
    end;
    

    调用存储过程

    call Getusers();
    

    删除存储过程

    drop procedure if exists Getusers;
    

    带参数的存储过程

    支持in(传递给存储过程),out(从存储过程传出),inout(对存储过程传入和传出)类型的参数

    展开全文
  • SQL存储过程优缺点

    千次阅读 2018-07-28 17:17:22
    存储过程是由一些SQL语句控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它,也可以从另一个过程或...

    概要:

    存储过程是由一些SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它,也可以从另一个过程或触发器调用。
    存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。
    根据返回值类型的不同,我们可以将存储过程分为三类:返回记录集的存储过程,返回数值的存储过程(也可以称为标量存储过程),以及行为存储过程。顾名思义,返回记录集的存储过程的执行结果是一个记录集,典型的例子是从数据库中检索出符合某一个或几个条件的记录;返回数值的存储过程执行完以后返回一个值,例如在数据库中执行一个有返回值的函数或命令;最后,行为存储过程仅仅是用来实现数据库的某个功能,而没有返回值,例如在数据库中的更新和删除操作。


    例子:

    大型数据库一般都支持存储过程,合理的利用存储过程也可以提高系统性能。如你有一个业务需要将A表的数据做一些加工然后更新到B表中,但是又不可能一条SQL完成,这时你需要如下3步操作:
    a:将A表数据全部取出到客户端;
    b:计算出要更新的数据;
    c:将计算结果更新到B表。
    如果采用存储过程你可以将整个业务逻辑封装在存储过程里,然后在客户端直接调用存储过程处理,这样可以减少网络交互的成本。


    优点:

    1. 减少网络通信量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织进存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大减少网络流量并降低了网络负载。
    2. 较快的执行速度:如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。
    3. 标准组件式编程:存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
    4. 作为一种安全机制来充分利用:使用存储过程使您能够增强对执行计划的重复使用,通过对执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
    5. 布式工作:应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。
    6. 可维护性高:更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。

    缺点:

    1. 不可移植性,每种数据库的内部编程语法都不太相同,当你的系统需要兼容多种数据库时最好不要用存储过程。
    2. 学习成本高,DBA一般都擅长写存储过程,但并不是每个程序员都能写好存储过程,除非你的团队有较多的开发人员熟悉写存储过程,否则后期系统维护会产生问题。
    3. 业务逻辑多处存在,采用存储过程后也就意味着你的系统有一些业务逻辑不是在应用程序里处理,这种架构会增加一些系统维护和调试成本。
    4. 存储过程和常用应用程序语言不一样,它支持的函数及语法有可能不能满足需求,有些逻辑就只能通过应用程序处理。
    5. 如果存储过程中有复杂运算的话,会增加一些数据库服务端的处理成本,对于集中式数据库可能会导致系统可扩展性问题。
    6. 为了提高性能,数据库会把存储过程代码编译成中间运行代码(类似于java的class文件),所以更像静态语言。当存储过程引用的对像(表、视图等等)结构改变后,存储过程需要重新编译才能生效,在高并发应用场景,一般都是在线变更结构的,所以在变更的瞬间要同时编译存储过程,这可能会导致数据库瞬间压力上升引起故障(Oracle数据库就存在这样的问题)。

    总结:

    普通业务逻辑尽量不要使用存储过程,定时性的ETL任务或报表统计函数可以根据团队资源情况采用存储过程处理。存储过程可以快速解决问题,但是移植性、维护性、扩展性不好,它有时会约束软件的架构,约速程序员的思维,在系统没有性能问题时不建议用存储过程。如果你要完成的功能只是一次或有限次的工作,如数据订正、数据迁移等等,存储过程也可以拿上用场。
    如果你的系统很小,并且有50%的开发人员熟练掌握PL/SQL,人员结构稳定,那存储过程可以减少很多代码量,并且性能不错。当系统变复杂了,开发人员多了,存储过程的弊端就会呈现。


    参考:

    [1] https://blog.csdn.net/yzsind/article/details/6059209
    [2] https://blog.csdn.net/stevendbaguo/article/details/28587419
    [3] https://blog.csdn.net/jackmacro/article/details/5688687
    [4] https://www.cnblogs.com/mark-chan/p/5384139.html

    展开全文
  • 优点: 1.允许模块化程序设计。2.可维护性高,只需创建存储过程一次并...存储过程将比T-SQL批代码的执行要快。存储过程是被编译后存放在数据库服务器的过程高速缓存中,当使用时,服务器不必再重新分析编译它们。...
  • 存储过程优缺点

    2020-05-16 09:50:39
    存储过程优缺点  优点  1. 运行速度:对于很简单的sql存储过程没有什么优势。对于复杂的业务逻辑,因为在存储过程创建的时候,数据库已经对其进行了一次解析优化。存储过程一旦执行,在内存中就会保留一...
  • 首先介绍一下概念,存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,是利用SQL Server所提供的Transact-SQL语言所编写的程序。... 存储过程分为系统存储过程和自定义存储过程 存...
  • 触发器和存储过程优缺点

    千次阅读 2013-11-21 10:31:08
    1、可移植性是存储过程和触发器最大的缺点。 2、占用服务器端太多的资源,对服务器造成很大的压力 3、不能做DDL。 4、触发器排错困难,而且数据容易造成不一致,后期维护不方便。 优点: 1、预编译,已...
  • 缺点:1、可移植性是存储过程和触发器最大的缺点。2、占用服务器端太多的资源,对服务器造成很大的压力3、不能做DDL。4、触发器排错困难,而且数据容易造成不一致,后期维护不方便。优点:1、预编译,已优化,效率较...
  • 存储过程是一些sql语句控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序通过存储过程名字调用,也可以从另一个存储过程或触发器调用。 它的参数可以被传递返回,与应用程序中的函数过程...
  • MySQL的存储过程优缺点 1、存储过程概念 存储过程是一些sql语句控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序通过存储过程名字调用,也可以从另一个存储过程或触发器调用。 它的参数可以...
  • 存储过程及游标的优缺点

    千次阅读 2018-11-23 17:18:57
    但是进入企业工作几年发现,实际的项目中很少使用存储过程和游标。当然啦,有些公司也会使用的,毕竟很少。今天咱们就来分析一下储存过程机游标的优缺点,比较一下就一步了然了用与不用的选择啦。 存储过程的优缺点...
  • 存储过程概念存储过程是一些sql语句控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序通过存储过程名字调用,也可以从另一个存储过程或触发器调用。它的参数可以被传递返回,与应用程序中...
  • 存储过程呢,其实就是存储在数据库目录中的一段声明...我们这次就来看下,这个存储过程优缺点。首先来看优点:通常存储过程有助于提高应用程序的性能。当创建,存储过程被编译之后,就存储在数据库中。 但是,MySQ...
  • 存储过程说白了就是一堆 SQL 的合并。中间加了点逻辑控制。 但是存储过程处理比较复杂的业务时比较实用。 比如说,一个复杂的数据操作。如果你在前台处理的话。可能会涉及到多次数据库连接。但如果你用存储过程的话...
  • 存储过程优缺点

    2013-07-31 10:54:00
    1、数据库已经编译过了,一次性编译2、执行速度快3、可以重复使用4、安全性高 1、模块化、提高程序安全性2、减少网络流量3、提高系统性能、减轻工作站负荷4、重复执行 ... 存储过程修改比较快方便,...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 259
精华内容 103
关键字:

存储过程和sql优缺点