存储过程入门与提高

什么是存储过程呢?

定义:

      将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。

讲到这里,可能有人要问:这么说存储过程就是一堆SQL语句而已啊?

                                       Microsoft公司为什么还要添加这个技术呢?

那么存储过程与一般的SQL语句有什么区别呢?

存储过程的优点:

                       1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

                        2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

                       3.存储过程可以重复使用,可减少数据库开发人员的工作量

                       4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权

存储过程的种类:

    1.系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作,

                               如 sp_help就是取得指定对象的相关信息

   2.扩展存储过程   以XP_开头,用来调用操作系统提供的功能

                              exec master..xp_cmdshell 'ping 10.8.16.1'

   3.用户自定义的存储过程,这是我们所指的存储过程

   常用格式

   Create procedure procedue_name

   [@parameter data_type][output]

   [with]{recompile|encryption}

   as

        sql_statement

解释: 

output:表示此参数是可传回的

with {recompile|encryption}

recompile:表示每次执行此存储过程时都重新编译一次

encryption:所创建的存储过程的内容会被加密

如:

   表book的内容如下

   编号    书名                           价格

   001      C语言入门                   $30

   002      PowerBuilder报表开发  $52

 实例1:查询表Book的内容的存储过程

   create proc query_book

      as

      select * from book

   go

   exec query_book

 实例2:加入一笔记录到表book,并查询此表中所有书籍的总金额

   Create proc insert_book

   @param1 char(10),@param2 varchar(20),@param3 money,@param4 money output

   with encryption  ---------加密

   as

   insert book(编号,书名,价格) Values(@param1,@param2,@param3)
   select @param4=sum(价格) from book
  go

  执行例子:
  declare @total_price money
  exec insert_book '003','Delphi 控件开发指南',$100,@total_price
  print '总金额为'+convert(varchar,@total_price)
  go
存储过程的3种传回值:
   1.以Return传回整数
   2.以output格式传回参数
   3.Recordset
传回值的区别:
       output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中 

实例3:设有两个表为Product,Order,其表内容如下:
      Product
           产品编号       产品名称    客户订数    
            001             钢笔         30        
            002             毛笔         50        
            003             铅笔         100       
      Order 
           产品编号         客户名     客户订金
            001              南山区      $30
            002              罗湖区      $50
            003              宝安区      $4
请实现按编号为连接条件,将两个表连接成一个临时表,该表只含编号.产品名.客户名.订金.总金额,
总金额=订金*订数,临时表放在存储过程中

代码如下:
     Create proc temp_sale
     as
       select a.产品编号,a.产品名称,b.客户名,b.客户订金,a.客户订数* b.客户订金 as总金额
       into #temptable from Product a inner join Order b on a.产品编号=b.产品编号
    if  @@error=0
       print 'Good'
    else
       print 'Fail'
     go


资料引用:http://www.knowsky.com/2951.html

 

转载于:https://www.cnblogs.com/cresuccess/archive/2008/12/07/1349427.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 11 nullptr关键字

C 11 nullptr关键字 转载:https://www.cnblogs.com/DswCnblog/p/5629073.html 熟悉C的童鞋都知道,为了避免“野指针”(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作。如…

Vue-watch选项

Vue ----watch 选项 用于 监听数据变化&#xff1a; 1 <!DOCTYPE html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 <meta name"viewport" content"widthdevice-width, initial-scale1.0"…

对SqlServer2008中的日志进行截断的方法

--第一步、执行以下语句&#xff1a; USE 数据库名 GO --第二步、备份数据库日志到c:\1.bak中 BACKUP LOG 数据库名 to diskc:\1.bak GO --第三步、查询此数据库的逻辑文件名 DECLARE Log_FileName VARCHAR(256) SELECT Log_FileNamename FROM sys.database_files WHERE FILE_I…

layui 在springboot2.x 时,页面展示不了layui的问题

[[]]是thymeleaf的内联表达式&#xff0c;在script上加 th:inline"none" 即可 报错信息 转载于:https://www.cnblogs.com/SeaWxx/p/10287505.html

ArcGIS Flex API 中的 Flex 技术(一)--事件

作者&#xff1a;Flyingis 本文严禁用于商业目的&#xff0c;如需转载请注明作者及原文链接&#xff0c;其他疑问请联系&#xff1a;dev.vip#gmail.com 在ArcGIS Flex API中探索Flex使用是一种不错的学习方法&#xff0c;可以相互辅助理解ArcGIS Flex API和Flex&#…

C++11 bind注意事项(传引用参数的时候)

默认情况下&#xff0c;bind的那些不是占位符的参数被拷贝到bind返回的可调用对象中。 当需要把对象传到bind中的参数中时&#xff0c;需要使用ref或者cref。 例如&#xff1a;

四元數與旋轉

为什么80%的码农都做不了架构师&#xff1f;>>> 在討論「四元數」之前&#xff0c;我們來想想對三維直角座標而言&#xff0c;在物體旋轉會有何影響&#xff0c;可以擴充三維直角座標系統的旋轉為三角度系統&#xff08;Three-angle system&#xff09;&#xff0c…

玩一下数组

来源&#xff1a;嵌入式大杂烩数组是最基本的数据结构&#xff0c;关于数组的面试题也屡见不鲜&#xff0c;本文罗列了一些常见的面试题&#xff0c;仅供参考。目前有以下18道题目。数组求和求数组的最大值和最小值求数组的最大值和次大值求数组中出现次数超过一半的元素求数组…

https部署

准备证书及秘钥 方式一、springboot项目可直接在yml中配置 1、需要将证书转换成jks或p12格式&#xff0c;如 多个crt证书转为pem: cat xxx.crt xxx2.crt xxx3.xrt xxx4.crt > server.pempem证书转为jks&#xff1a; //PEM--->PFXopenssl pkcs12 -export -out test.pfx -…

STP学习笔记本

生成树协议&#xff1a;&#xff08;1&#xff09;作用&#xff1a;防止环路、冗余备份&#xff08;2&#xff09;如果网络存在环路&#xff0c;会给网络带来什么影响&#xff1f;答&#xff1a;广播风暴重复帧现象MAC地址表震荡&#xff08;3&#xff09;STP解决方法&#xff…

每日集成Tip: CruiseControl.Net 提示DLL文见找不到的解决方法

项目中引用了第三方类库&#xff0c;当帮项目上传到服务器时&#xff0c;提示找不到路径&#xff0c;经过CruiseControl.Net发现&#xff0c;他找的是我我本地的目录 因此&#xff0c;当引入第三方类库时&#xff0c;按如下步骤 (1). 在源码的目录下见一个新的目录(ThirdParty)…

将GDB中的输出定向到文件

将所有栈信息保存到文件11中 在gdb中: set logging file 11 set logging on thread apply all bt set logging off 结束之后&#xff0c;在相关目录下查看11文件

不生孩子能怎么办?

你会选择不婚或者丁克的生活吗&#xff1f;你是否也想过未来养老的问题呢&#xff1f;如果想过&#xff0c;你对此又有什么规划呢&#xff1f;欢迎留言讨论&#xff01;本文原创公众号&#xff1a;不会笑青年&#xff0c;授权转载请联系微信(laughyouth369)&#xff0c;授权后&…

CORS跨域请求

CORS跨域请求 CORS即Cross Origin Resource Sharing 跨域资源共享&#xff0c; 那么跨域请求还分为两种&#xff0c;一种叫简单请求&#xff0c;一种是复杂请求~~ 简单请求 HTTP方法是下列方法之一 HEAD&#xff0c; GET&#xff0c;POST HTTP头信息不超出以下几种字段 Accept&…

原博客文章(Apache初配2008/4/8)

2008/4/8Apache初配 最近在做个小网站,做好了大部分的页面,要发布,开始的时候选择了IIS发布,后来由于一些问题,还有我们网络工程师的推荐,决定用Apache,于是研究了以下,把自己的初配和感受记录下来,也是为了和我一样的初配Apache的朋友一点帮助!Apache对Asp.net的程序是不支持的…

__attribute__((always_inline))

__attribute__((always_inline))的意思是强制内联&#xff0c;所有加了__attribute__((always_inline))的函数再被调用时不会被编译成函数调用而是直接扩展到调用函数体内&#xff0c;例子如下&#xff1a; define inline __attribute((always_inline))的意思就是用 inline 代…

抽奖|我的学习书单—嵌入式Linux shell

大家好&#xff0c;双十一就来了&#xff0c;推荐一组书单给大家。&#x1f9a2;&#xff0c;这些年&#xff0c;非常感谢大家这些年对这小公众号的支持&#xff0c;最近厚着脸皮跟出版社拿到10本书籍赠送给公众号的小伙伴&#xff0c;规则写在文末&#xff0c;感兴趣的小伙伴可…

应用程序池优化配置方案(IIS7、IIS7.5)

定义&#xff1a; 是将一个或多个应用程序链接到一个或多个工作进程集合的配置&#xff0c;该池中的应用程序与其他应用程序被工作进程边界分隔&#xff0c; 一、一般优化方案 1.基本设置 【1】队列长度&#xff1a;默认1000&#xff0c;将原来的队列长度65535 【2】启动32位应…

Linux Cpu 利用率计算

转载&#xff1a;http://blog.chinaunix.net/uid-20057401-id-1979033.html 前几天要写一个取得linux performance的函数。查询了一些资料。发现有几种计算cpu利用率的方法。但是都不怎么正确。最后查了以下top的源代码。现列出其计算cpu利用率的关键函数 c代码如下&#x…

Delphi 记录类型- 结构指针

转自&#xff1a;万一老师的 Delphi 博客 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 class(TForm) Button1: TButton; Button2: TButton; …