存储过程(Stored Procedure)是数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

创建存储过程的基本代码结构

  1. CREATE PROCEDURE Procedure_Name
  2.  
  3. --Procedure_Name为存储过程名(不能以阿拉伯数字开头),在一个数据库中触发器名是唯一的。名字的长度不能超过个字。PROCEDURE可以简写为PROC
  4.  
  5. @Param1 Datatype,@Param2 Datatype
  6.  
  7. --@Param1@Param2为存储过程的参数,Datatype为参数类型,多个参数用逗号隔开,最多允许个参数。
  8.  
  9. AS --存储过程要执行的操作
  10.  
  11. BEGIN
  12.  
  13. --BEGINEND组成一个代码块,可以写也可以不写,如果存储过程中执行的SQL语句比较复杂,用BEGINEND会让代码更加整齐,更容易理解。
  14.  
  15. END
  16. GO --GO就代表结操作完毕  
  17.  
  18. exec Procedure_Name [参数名] --调用存储过程Procedure_Name
  19.  
  20. drop procedure Procedure_Name --删除存储过程Procedure_Name,不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程
  21.  
  22. show procedure status --显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等
  23.  
  24. show create procedure Procedure_Name --显示存储过程Procedure_Name的详细信息
  25.  
  26. exec sp_helptext Procedure_Name --显示你这个Procedure_Name这个对象创建文本

  下面两个小例子

1.首先建立这样的一个库和表

2.简单查询不带参数。

  1. 存储过程创建
  2. create procedure sp_p1
  3. as
  4. select * from people
  5.  
  6. Sql调用
  7. exec sp_p1
  8.  
  9. C#调用
  10. SqlConnection conn = new SqlConnection();
  11. conn.ConnectionString = @"Server=PC201312290054\SQLEXPRESS;database=Test;uid=sa;pwd=sa";//连接数据库
  12. conn.Open();
  13. SqlCommand cmd = new SqlCommand("sp_p1", conn);//其中Proc为存储过程名称
  14. cmd.CommandType = CommandType.StoredProcedure;//指定执行类型为存储过程
  15. DataTable dt = new DataTable();
  16. //执行存储过程
  17. SqlDataAdapter sda = new SqlDataAdapter(cmd);
  18. //将结果填充到datatable中
  19. sda.Fill(dt);
  20. //return dt;//返回Datatable
  21. dataGridView1.DataSource = dt;

  

3.简单查询带参数

  1. 创建
  2. create procedure sp_p2
  3. @id int
  4. as
  5. select * from people where id=@id
  6.  
  7. Sql 调用
  8. exec sp_p2
  9.  
  10. C# 调用
  11.  
  12. SqlConnection conn = new SqlConnection();
  13. conn.ConnectionString = @"Server=PC201312290054\SQLEXPRESS;database=Test;uid=sa;pwd=sa";//连接数据库
  14. conn.Open();
  15. SqlCommand cmd = new SqlCommand("sp_p2", conn);//其中Proc为存储过程名称
  16. cmd.CommandType = CommandType.StoredProcedure;//指定执行类型为存储过程
  17. cmd.Parameters.Add(new SqlParameter("@id", ));//传递参数
  18. DataTable dt = new DataTable();
  19. //执行存储过程
  20. SqlDataAdapter sda = new SqlDataAdapter(cmd);
  21. //将结果填充到datatable中
  22. sda.Fill(dt);
  23. dataGridView1.DataSource = dt;

4.常用系统存储过程

  1. exec sp_databases; --查看数据库
  2. exec sp_tables; --查看表
  3. exec sp_columns student;--查看列
  4. exec sp_helpIndex student;--查看索引
  5. exec sp_helpConstraint student;--约束
  6. exec sp_stored_procedures;
  7. exec sp_helptext 'sp_stored_procedures';--查看存储过程创建、定义语句
  8. exec sp_rename student, stuInfo;--修改表、索引、列的名称
  9. exec sp_renamedb myTempDB, myDB;--更改数据库名称
  10. exec sp_defaultdb 'master', 'myDB';--更改登录名的默认数据库
  11. exec sp_helpdb;--数据库帮助,查询数据库信息
  12. exec sp_helpdb master;

5.优点

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

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

  3.存储过程可以重复使用,可减少数据库开发人员的工作量(复用性高,面向对象的编程思想)

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

缺点

  1.调试麻烦。

  2.移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。

  3.重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。

  4.如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。

sql存储过程的简单使用的更多相关文章

  1. sql存储过程几个简单例子

    导读:sql存储是数据库操作过程中比较重要的一个环节,对于一些初学者来说也是比较抽象难理解的,本文我将通过几个实例来解析数据库中的sql存储过程,这样就将抽象的事物形象化,比较容易理解. 例1: cr ...

  2. 一个SQL存储过程面试题(比较简单)

    三个月前刚毕业的时候,听到存储过程就头疼. 写一个SQL存储过程,建立一个表USER 字段是姓名,年龄,职位,权限,然后向里面插入6条数据,然后查询出年龄大于18的所有信息. 下面是答案: 复制代码 ...

  3. 你真的会玩SQL吗?简单的数据修改

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  4. SQL存储过程概念剖析

    一.SQL存储过程的概念,优点及语法 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execut ...

  5. SQL存储过程+游标 循环批量()操作数据

    本人收集的,挺有用的 1. 利用游标循环更新.删除MemberAccount表中的数据 DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT * FROM dbo.M ...

  6. sQL存储过程的优缺点

    目前具体的项目中没有使用sql存储过程,都用的封装好的框架,简单说下存储过程的优缺点. 优点: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编 ...

  7. sql存储过程中循环批量插入

    前几天有一个需求很头痛,部门是有上下级关系的,在给部门的经理赋予角色和权限的时候,通常我们都会认为假如经理A的部门是1,那么我给了他部门1 的管理权限,那么1的下级部门101,102,103 &quo ...

  8. PL/SQL存储过程编程

    PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...

  9. SQL存储过程分页(通用的拼接SQL语句思路实现)

    多表通用的SQL存储过程分页 案例一: USE [Community] GO /****** Object: StoredProcedure [dbo].[Common_PageList] Scrip ...

随机推荐

  1. 行变列 拼接字符串 MSSQL 一个超级搞的问题

    由数据 ThreeLevelSortID KeyWordID KeyWordName key1 key2 key3 key4 得到数据大 ThreeLevelSortID KeyWordName ke ...

  2. 二叉查找树的Find,FindMin,FindMax的递归和非递归实现

    typedef struct TreeNode *Position; typedef struct TreeNode *SearchTree; struct TreeNode{ ElementType ...

  3. aix光盘安装包 aix puppet agent 自动化安装

    脚本待处理事务1,替换指定行数据2,获取$1 :字段分割 [Tips Notes,byRui]从光盘等安装媒介中isntallp -l -d /opt/ruiyhe or /dev/cd0 搜索所有的 ...

  4. cf-公式专场

    A. Again Twenty Five! time limit per test 0.5 seconds memory limit per test 64 megabytes input stand ...

  5. js生成随机数的方法实例总结 [收藏]

    js生成随机数的方法实例总结 js生成随机数主要用到了内置的Math对象的random()方法.用法如:Math.random().它返回的是一个 0 ~ 1 之间的随机数.有了这么一个方法,那生成任 ...

  6. 引用jquery框架后出错

    问题描述:当引用了jquery框架后,页面的js不能正常工作. 后面我的解决办法:是因为在引用 jquery的框架时的代码为 <script type="text/javascript ...

  7. Can't load IA 32-bit .dll on a AMD 64-bit platform

    在myeclipse中使用的,tomcat异常:java.lang.UnsatisfiedLinkError: D:\JAVA\ApacheTomcat\bin\tcnative-1.dll: Can ...

  8. http request parameter

    http request parameter add htmlspecialchars host?vendor_id=1000000&q=Some%20children%20wish%20to ...

  9. Git 系列(三):建立你的第一个 Git 仓库

    现在是时候学习怎样创建你自己的 Git 仓库了,还有怎样增加文件和完成提交. 在本系列前面的文章中,你已经学习了怎样作为一个最终用户与 Git 进行交互:你就像一个漫无目的的流浪者一样偶然发现了一个开 ...

  10. shell命令实战详解

    1.解析路径获取文件名和目录名. 获取文件名      #awk解法:用“/”做分隔符,然后打印出最后的那一部分. resFile=`echo /tmp/csdn/zhengyi/test/adb.l ...