sql存储过程的简单使用
存储过程(Stored Procedure)是数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
创建存储过程的基本代码结构
- CREATE PROCEDURE Procedure_Name
- --Procedure_Name为存储过程名(不能以阿拉伯数字开头),在一个数据库中触发器名是唯一的。名字的长度不能超过个字。PROCEDURE可以简写为PROC。
- @Param1 Datatype,@Param2 Datatype
- --@Param1和@Param2为存储过程的参数,Datatype为参数类型,多个参数用逗号隔开,最多允许个参数。
- AS --存储过程要执行的操作
- BEGIN
- --BEGIN跟END组成一个代码块,可以写也可以不写,如果存储过程中执行的SQL语句比较复杂,用BEGIN和END会让代码更加整齐,更容易理解。
- END
- GO --GO就代表结操作完毕
- exec Procedure_Name [参数名] --调用存储过程Procedure_Name。
- drop procedure Procedure_Name --删除存储过程Procedure_Name,不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程
- show procedure status --显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等
- show create procedure Procedure_Name --显示存储过程Procedure_Name的详细信息
- exec sp_helptext Procedure_Name --显示你这个Procedure_Name这个对象创建文本
下面两个小例子
1.首先建立这样的一个库和表


2.简单查询不带参数。
- 存储过程创建
- create procedure sp_p1
- as
- select * from people
- Sql调用
- exec sp_p1
- C#调用
- SqlConnection conn = new SqlConnection();
- conn.ConnectionString = @"Server=PC201312290054\SQLEXPRESS;database=Test;uid=sa;pwd=sa";//连接数据库
- conn.Open();
- SqlCommand cmd = new SqlCommand("sp_p1", conn);//其中Proc为存储过程名称
- cmd.CommandType = CommandType.StoredProcedure;//指定执行类型为存储过程
- DataTable dt = new DataTable();
- //执行存储过程
- SqlDataAdapter sda = new SqlDataAdapter(cmd);
- //将结果填充到datatable中
- sda.Fill(dt);
- //return dt;//返回Datatable
- dataGridView1.DataSource = dt;
3.简单查询带参数
- 创建
- create procedure sp_p2
- @id int
- as
- select * from people where id=@id
- Sql 调用
- exec sp_p2
- C# 调用
- SqlConnection conn = new SqlConnection();
- conn.ConnectionString = @"Server=PC201312290054\SQLEXPRESS;database=Test;uid=sa;pwd=sa";//连接数据库
- conn.Open();
- SqlCommand cmd = new SqlCommand("sp_p2", conn);//其中Proc为存储过程名称
- cmd.CommandType = CommandType.StoredProcedure;//指定执行类型为存储过程
- cmd.Parameters.Add(new SqlParameter("@id", ));//传递参数
- DataTable dt = new DataTable();
- //执行存储过程
- SqlDataAdapter sda = new SqlDataAdapter(cmd);
- //将结果填充到datatable中
- sda.Fill(dt);
- dataGridView1.DataSource = dt;
4.常用系统存储过程
- exec sp_databases; --查看数据库
- exec sp_tables; --查看表
- exec sp_columns student;--查看列
- exec sp_helpIndex student;--查看索引
- exec sp_helpConstraint student;--约束
- exec sp_stored_procedures;
- exec sp_helptext 'sp_stored_procedures';--查看存储过程创建、定义语句
- exec sp_rename student, stuInfo;--修改表、索引、列的名称
- exec sp_renamedb myTempDB, myDB;--更改数据库名称
- exec sp_defaultdb 'master', 'myDB';--更改登录名的默认数据库
- exec sp_helpdb;--数据库帮助,查询数据库信息
- exec sp_helpdb master;
5.优点
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量(复用性高,面向对象的编程思想)
4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权
缺点
1.调试麻烦。
2.移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。
3.重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。
4.如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。
sql存储过程的简单使用的更多相关文章
- sql存储过程几个简单例子
导读:sql存储是数据库操作过程中比较重要的一个环节,对于一些初学者来说也是比较抽象难理解的,本文我将通过几个实例来解析数据库中的sql存储过程,这样就将抽象的事物形象化,比较容易理解. 例1: cr ...
- 一个SQL存储过程面试题(比较简单)
三个月前刚毕业的时候,听到存储过程就头疼. 写一个SQL存储过程,建立一个表USER 字段是姓名,年龄,职位,权限,然后向里面插入6条数据,然后查询出年龄大于18的所有信息. 下面是答案: 复制代码 ...
- 你真的会玩SQL吗?简单的数据修改
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- SQL存储过程概念剖析
一.SQL存储过程的概念,优点及语法 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execut ...
- SQL存储过程+游标 循环批量()操作数据
本人收集的,挺有用的 1. 利用游标循环更新.删除MemberAccount表中的数据 DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT * FROM dbo.M ...
- sQL存储过程的优缺点
目前具体的项目中没有使用sql存储过程,都用的封装好的框架,简单说下存储过程的优缺点. 优点: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编 ...
- sql存储过程中循环批量插入
前几天有一个需求很头痛,部门是有上下级关系的,在给部门的经理赋予角色和权限的时候,通常我们都会认为假如经理A的部门是1,那么我给了他部门1 的管理权限,那么1的下级部门101,102,103 &quo ...
- PL/SQL存储过程编程
PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...
- SQL存储过程分页(通用的拼接SQL语句思路实现)
多表通用的SQL存储过程分页 案例一: USE [Community] GO /****** Object: StoredProcedure [dbo].[Common_PageList] Scrip ...
随机推荐
- Delphi代码中嵌入ASM代码
前言 Delphi作为一个快速高效的开发平台,使用的人越来越多,但熟悉在Delphi代码中嵌入ASM代码的程序员我想不多,因为这方面的资料太少了,另一方面,它还需要有基本的汇编语言知识,关於汇编语言的 ...
- Android 微信分享信息
随着微信越来越火,越来越多的应用要求有分享到微信的功能.虽然有很多平台都帮集成有分享功能,比如友盟.但是个人觉得友盟集成的东西太多了,自己封装得太过分了,很多资源文件也要带进去,所以感觉不是怎么好,所 ...
- Codeforces 241B
因为博客园的公式编辑有点坑,所以-- 原题
- JVM(Java虚拟机)优化大全和案例实战
堆内存设置 原理 JVM堆内存分为2块:Permanent Space 和 Heap Space. Permanent 即 持久代(Permanent Generation),主要存放的是Java类定 ...
- JQuery(下)
26.jQuery 中的 DOM 操作 )DOM(Document Object Model—文档对象模型):一种与浏览器, 平台, 语言无关的接口, 使用该接口可以轻松地访问页面中所有的标准组件 ) ...
- Linux系统下安装phpmyadmin方法
phpmyadmin下载地址:不要分,赶紧去下载吧!http://download.csdn.net/detail/u011986449/7429799 1.找到 /libraries/config. ...
- 嵌入式OS入门笔记-以RTX为案例:六.RTX的任务调度
嵌入式OS入门笔记-以RTX为案例:六.RTX的任务调度 上一篇笔记介绍了一些绕开排程器(或调度程序,scheduler)来进行时间管理的一些小方法.这一篇详细介绍RTX的任务调度原理. RTX主要有 ...
- c++中自增(++)和自减(--)操作符
自增(++)和自减(--)操作符为对象加1 或减1 操作提供了方便简短的实现方式.它们有前置和后置两种使用形式.到目前为止,我们已经使用过前自增操作,该操作使其操作数加1,操作结果是修改后的值.同理, ...
- jsp相对路径和绝对路径小谈
很长一段时间纠结过JSP中的相对路径和绝对路径,也研究过一段时间,今天趁着有点时间,记下来,也有大家分享一下. 1)我们先来理解一下相对路径 首先还是我们的开始,建一个WEB项目,只是测试一下而已,名 ...
- ajax 实例
jsp页面代码: <script type="text/javascript"> var xmlHttp; function createXMLHttp(){ if(w ...