当前位置:  数据库>sqlserver

SQL Server 存储过程解析

    来源: 互联网  发布时间:2014-09-05

    本文导语:  存储过程功能的优点   为什么要使用存储过程?以下是存储过程技术的几大主要优点:   预编译执行程序。SQL Server只需要对每一个存储过程进行一次编译,然后就可以重复使用执行计划。这个特点通过重复调用存储程序...

存储过程功能的优点

  为什么要使用存储过程?以下是存储过程技术的几大主要优点:

  •   预编译执行程序。SQL Server只需要对每一个存储过程进行一次编译,然后就可以重复使用执行计划。这个特点通过重复调用存储程序极大地提高了程序的性能。
  •   缩短客户端/服务器之间的信息传输量。如果你的工作环境带宽有限,那么存储过程技术肯定能够满足你,因为它能够把需要传输的长的SQL查询缩短成一行。
  •   有效重复使用代码和编程。存储过程可以为多个用户所使用,也可以用于多个客户程序。这样可以减少程序开发周期的时间。
  •   增强安全性控制。可以允许用户单独执行存储过程,而不给于其访问表格的权限。
  •   结构

      存储过程的结构跟其他编程语言非常相似。存储过程接受输入参数形式的数据。这些输入参数在执行系列语句的时候被运用并生成结果。结果在通过使用记录集、输出参数和返回代码返回。听起来似乎很复杂,实际上存储程序非常简单。

      实例

      假设我们有如下名为Inventory的表格,表格里的数据需要实时更新,仓库经理会不停地检查仓库里的货存数量和可供发货的货存数量。以前,每一个地区的仓库经理都会进行如下查询:

     

    以下是引用片段:
      SELECT Product, Quantity
      FROM Inventory
      WHERE Warehouse = 'FL'

      这样的查询使SQL Server性能效率非常低下。每次仓库经理执行该查询,数据库服务器都不得不重新对其进行编译然后重新开始执行。这样的查询还要求仓库经理具备SQL方面的知识,并且拥有访问表格数据的权限。

      我们可以通过使用存储过程来简化这个查询过程。首先创建一个名为 sp_GetInventory的过程,能够获取一个已有仓库的货存水平。下面是创建该程序的SQL代码:

     

    以下是引用片段:
      CREATE PROCEDURE sp_GetInventory
      @location varchar(10)
      AS
      SELECT Product, Quantity
      FROM Inventory
      WHERE Warehouse = @location

      A地区的仓库经理可以执行下面的命令来获得货存水平:

     

    以下是引用片段:
      EXECUTE sp_GetInventory 'FL'

      B地区的仓库经理可以使用同样的存储过程来访问该地区的货存信息。

     

    以下是引用片段:
      EXECUTE sp_GetInventory 'NY'

      当然,这只是一个很简单的例子,但是可以看出来存储过程的好处。仓库经理不一定要懂得SQL或者存储过程内在的工作原理。从性能的角度看的话,存储过程无疑大大地提高了工作的效率。SQL Server只需创建执行计划一次,然后就可以重复使用存储过程,只需要在每次执行时输入适当的参数就可以了。

      货存表格:   
    ID
    Product
    Warehouse
    Quantity
    142
    Green beans
    NY
    100
    214
    Peas
    FL
    200
    825
    Corn
    NY
    140
    512
    Lima beans
    NY
    180
    491
    Tomatoes
    FL
    80
    379
    Watermelon
    FL
    85

        
     
     

    您可能感兴趣的文章:

  • oracle SQL解析步骤小结
  • MySQL的SQL语法解析器 DBIx-MyParse
  • SQL解析类库 SQLJEP
  • 解析MYSQL 数据库导入SQL 文件出现乱码的问题
  • Oracle中DBMS_SQL解析SQL语句的流程
  • sql语句not and or执行顺序(实例解析)
  • 解析:清除SQL被注入恶意病毒代码的语句
  • 解析关于SQL语句Count的一点细节
  • 解析PL/SQL Developer导入导出数据库的方法以及说明
  • SQL分组查询实例解析
  • SQL_Server全文索引的用法解析
  • SQL嵌套查询示例解析
  • 解析sql语句中left_join、inner_join中的on与where的区别
  • 解析sql中得到刚刚插入的数据的id
  • 解析如何用SQL语句在指定字段前面插入新的字段
  • 解析Oracle查询和删除JOB的SQL
  • T-SQL 查询语句的执行顺序解析
  • 解析SQL语句中Replace INTO与INSERT INTO的不同之处
  • sql语句中like的用法详细解析
  • sql 表变量与临时表的实例解析
  • 在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名
  • java/j2ee iis7站长之家
  • 急!如何从一个shell文件中传递一个参数到sql文件中,不能用存储过程
  • 在SQL server 2000中用JAVA实现图片存储
  • 用SQL统计SQLServe表存储空间大小的代码
  • 返回SQL执行时间的存储过程
  • java能否调用SQL-SERVER存储过程呢?如果能?如何调?
  • MySQL 存储过程中执行动态SQL语句的方法
  • 浅析SQL Server中包含事务的存储过程
  • SQL SERVER 利用存储过程查看角色和用户信息的写法
  • sql server中sp_reset_connection存储过程的作用
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • (X86/X64)安装sql server 2005 过程中提示“无法启动sql server的 启动”的解决方法
  • 请教各位,如何在JSP中调用SQL 过程?
  • oracle sql执行过程(流程图)
  • sql2005 存储过程分页示例代码
  • sql server 存储过程使用 IF ELSE 的例子
  • SQL Server创建链接服务器的存储过程示例分享
  • sql server 存储过程中If Else的用法举例
  • sql2005 存储过程的简单例子
  • SQL Server存储过程入门学习
  • sql server 存储过程的异常处理
  • sql2005中创建CLR存储过程的方法详解
  • 在SQL Server 2005中创建CLR存储过程的详细介绍
  • 通过sql存储过程发送邮件的方法
  • sql存储过程详解
  • sql存储过程 求平均值和总和
  • Sql Server使用cursor处理重复数据过程详解
  • 一次SQL调优数据库性能问题后的过程(300W)
  • sql server存储过程分页示例
  • sql 判断数据库,表,存储过程等是否存在的代码
  • Oracle过程中执行动态SQL或DDL语句
  • java命名空间java.sql接口statement的类成员方法: executeupdate定义及介绍
  • 请问,这是什么错误!java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][Named Pipes]??????? SQL Server?虽然分少,但一定给,只要您是前5名回复者中最好的以为!
  • java命名空间java.sql接口connection的类成员方法: nativesql定义及介绍
  • SQL查询分析工具 SQL Workbench/J
  • java命名空间java.sql接口preparedstatement的类成员方法: executeupdate定义及介绍
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • java命名空间java.sql接口rowid的类成员方法: getbytes定义及介绍
  • SQL Server统计SQL语句执行时间的脚本
  • java命名空间java.sql接口ref的类成员方法: getbasetypename定义及介绍
  • SQL客户端软件 PKLite SQL Client
  • java命名空间java.sql接口databasemetadata的类成员方法: getsqlkeywords定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3