什么是存储过程?

  • 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。
  • 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。
  • 由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。同时由于在调用时只需用提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量、简单网络负担。

存储过程创建语法

create proc | procedure pro_name[{@参数数据类型} [=默认值] [output],{@参数数据类型} [=默认值] [output],....]
asSQL_statements

操作实例
首先创建两张表

Student表

Course表

其中Course表中的F_StuId为Student表的F_ID是外键关联

增加测试数据,顺便练一下sql语法

DECLARE @i INT, @F_Name VARCHAR(50), @F_Age INT, @F_Sex VARCHAR(2), @F_Hobby VARCHAR(50), @ranNum INT
SET @i = 0
SET @F_Name = '小明'
SET @F_Age = 0
WHILE @i < 100
BEGINSET @ranNum = RAND() * 4 --生成一个0-3的随机数IF @ranNum = 0BEGINSET @F_Sex = '男'SET @F_Hobby = '篮球'ENDELSE IF @ranNum = 1BEGINSET @F_Sex = '男'SET @F_Hobby = '足球'ENDELSE IF @ranNum = 2BEGINSET @F_Sex = '女'SET @F_Hobby = '刺绣'ENDELSEBEGINSET @F_Sex = '女'SET @F_Hobby = '跳绳'ENDINSERT INTO Student (F_Name, F_Age, F_Sex, F_Hobby) VALUES (@F_Name + CONVERT(VARCHAR(3), @i), @F_Age + @i, @F_Sex, @F_Hobby)SET @i = @i + 1
END
GO
DECLARE @i INT, @F_StuId INT, @F_Course VARCHAR(50), @F_Score INT, @ranNum INT
SET @i = 0
SET @F_StuId = 0
SET @F_Course = '语文'
SET @F_Score = 0
WHILE @i < 100
BEGINSET @ranNum = RAND() * 3 IF @ranNum = 0BEGINSET @F_Course = '语文'ENDELSE IF @ranNum = 1BEGINSET @F_Course = '数学'ENDELSEBEGINSET @F_Course = '英语'ENDINSERT INTO Course (F_StuId, F_Course, F_Score) VALUES (@F_StuId + @i, @F_Course, @F_Score + @i)SET @i = @i + 1
END

之后我们根据存储过程的语法创建一个无参的存储过程

create proc proc_get_student
as
select * from Student

创建好以后我们可以在可编程性中找到我们新建的存储过程

然后执行这个存储过程

exec proc_get_student

执行结果

接下来我们来创建一个带参数的存储过程

create proc proc_find_stu(@startId int, @endId int)
as
select * from Student where F_ID between @startId and @endId

执行存储过程(取到id为10-20的学生信息)

exec proc_find_stu 10,20

执行结果

接下来我通过一个存储过程来完成联表查询+分页显示

create proc proc_page(@currPage int, @pageSize int, @keyWord varchar(50))
as
select a.F_ID, a.F_Name, a.F_Sex, b.F_Course, b.F_Score from Student a left join Course b on a.F_ID = b.F_StuId
where [F_Name] like '%' + @keyWord + '%'
order by a.F_ID
offset ((@currPage - 1) * @pageSize) rows
fetch next @pageSize rows only

执行该存储过程

exec proc_page 1, 10, '0'

执行结果

SqlServer存储过程入门相关推荐

  1. sqlserver存储过程入门之 游标

    1.游标是SQL的一个内存工作区,由系统或用户以变量的形式定义. 以下是基本步伐: 不懂的问我 定义,打开 ,使用,关闭,释放 DECLARE @temp VARCHAR(12) -- 临时变量 de ...

  2. sqlserver存储过程入门?看不懂打死我

    sqlserver存储过程入门 1.工具 2.基础知识 游标 DECLARE 赋值 set 赋值 into if else 代替 REPLACE CASE WHEN CONCAT 函数 字符串连接 B ...

  3. mysql query browswer_MySQL数据库新特性之存储过程入门教程

    MySQL数据库新特性之存储过程入门教程 在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用 ...

  4. SQLSERVER存储过程基本语法

    一.定义变量 --简单赋值 declare @a int set @a=5 print @a   --使用select语句赋值 declare @user1 nvarchar(50) select @ ...

  5. 网络工作室暑假后第二次培训资料(SQLServer存储过程和ADO.NET访问存储过程)整理(一)...

    因为昨天我的SQL Server 2008数据库在使用的时候突然就打不开了.而起前天还用它来写T-SQL语句来着.所以很是郁闷啊,到网上查询以后,不能解决,就干脆重新安装了一边,所以昨天整理的内容不能 ...

  6. PHP写sqlserver事务,php调用sqlserver存储过程使用事务处理

    第一次编写 sqlserver存储过程并在php里调用,把脑瓜都整大了,奋战了一天多最后还是搞定了. 实现功能:在 sqlserver里面实现事务处理,保证数据库操作安全: 接收sqlserver存储 ...

  7. python获取数据库的存储过程_python远程调用sqlserver存储过程记录

    开发中需要python远程调用sqlserver存储过程.搜索了网上有两种方式,pymssql和pyodbc.开始采用第一种方式开发,不过无法拿到存储过程中的返回数据,后采用pyodbc开发,当然存储 ...

  8. java调用存储过程sqlserver_Java调用SqlServer存储过程怎么实现 | 学步园

    在使用Java开发时,经常会遇到调用SqlServer存储过程的问题.下面学步园小编来讲解下Java调用SqlServer存储过程怎么实现? Java调用SqlServer存储过程怎么实现 1.数据库 ...

  9. 破解SQLSERVER存储过程的加密

    破解SQLSERVER存储过程的加密 http://download.csdn.net/detail/liujiayu2/8620519

最新文章

  1. python基础---元组、字典、函数、文件、异常
  2. 1024程序员节,你是我们要找的那条锦鲤吗?
  3. boost::copy_n相关的测试程序
  4. 人脸识别(三)——源码放送。opencv人脸识别
  5. rails表单控件helper
  6. aop在项目中的实际运用_【消防验收】防火玻璃在实际运用中的四大关键问题
  7. 拓扑排序两种实现方式
  8. 用java打出矩形阵型的数字_java输出数字发散矩形
  9. 清空网站浏览记录就行啦?看Python如何实时监控网站浏览记录
  10. 多用户文件系统java实现_为什么要有文件系统?文件系统都有那些种类?
  11. 空间相关性分析:空间权重矩阵
  12. java销毁servlet_「销毁session」Servlet销毁session - seo实验室
  13. ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十二节--小结,Bootstrap Table之角色管理
  14. 3.26 文字工具的使用 [原创Ps教程]
  15. 用python玩转视频帧率
  16. Exception caught: mqAdminExt get broker stats data TOPIC_PUT_NUMS failed
  17. 千万不要嫁给程序猿,我是认真的
  18. 一名普通cs本科生的自述—【大学到底怎么过才值?】
  19. 国内有哪些公司参与鸿蒙系统,终于有手机厂商接入鸿蒙系统了!
  20. Cause: java.sql.SQLException: Zero date value prohibited 异常解决方法

热门文章

  1. FatFs 之二 路径规则、字符编码、编码页、卷管理详解
  2. mybatis调用存储过程报错The error occurred while setting parameters
  3. 杰里AC79XX之开发环境搭建(1)
  4. Autodesk 卸载工具,一键完全彻底卸载删除autodesk软件专门卸载工具
  5. 【SPIE独立出版 | Ei检索 】第二届物联网与机器学习国际学术会议征稿中!
  6. 关于计算机的外文翻译博客,个人博客网站设计外文翻译
  7. 今天给大家推荐搜狗一个开源项目
  8. GitHub 要进入中国啦!
  9. [渝粤教育] 商丘师范学院 网球 参考 资料
  10. Jena文档《An Introduction to RDF and the Jena RDF API》的译文