当前位置: 首页 > news >正文

T-SQL 高阶语法之存储过程

一:存储过程概念

预先存储好的sql程序,通过名称和参数进行执行,供应程序去调用,也可以有返回结果,存储过程可以包含sql语句

可以包含流程控制、逻辑语句等。

二:存储过程的优点

执行速度更快
允许模块化程序设计
提高系统安全性
减少网络流通量

三:存储过程的分类

1 系统提供的存储过程:名称一般都是以sp_开头,由SQLServer创建、管理和使用,存放在master数据库中。
2 扩展存储过程:名称一般都是以xp_开头,使用编程语言C#创建外部的存储过程,以DLL扩展集的形式存在
3 自定义存储过程:用户在自己的数据库中创建的存储过程

 四:常用系统存储过程:

1 列出有关指定数据库或者所有的数据库信息 

exec sp_helpdb SMDB

2 更改数据库名字,@newname 参数1 新名字; @dbname 参数2 旧名称
别同时改一个数据库名称 

exec sp_renamedb @newname='p',@dbname='Phone' 

3 返回某个表列的信息 

exec sp_columns Students 

 4 查看一个表的约束信息

 exec sp_helpconstraint Students

 5 查看表的所有信息

 exec sp_help Students

 6 查看某个表的索引信息

 exec sp_helpindex Students

五:自定义存储 的语法

 create procedure 过程名
-- @参数1 数据类型
-- @参数2 数据类型
--as
-- sql语句
--go

 六:关于自定义存储 的例子

 一:创建一个存储过程。查询考试成绩,显示学号姓名或者班级总成绩,并按照成绩总分高低排序
 -- 统计分析考试成绩,显示班级名称 C#平均分 数据库平均分 按照班级的分组来进行实现
use SMDBgo-- 如果已经存在 usp_test1存储过程 就先删除这个存储过程if exists(select * from sysobjects where name ='usp_test1')drop procedure usp_tes1go-- 定义存储过程create procedure usp_tes1as -- sql语句-- 查询考试成绩,显示学号姓名班级总成绩,并按照成绩总分高低排序select Students.StudentId,StudentName,ClassName,总成绩 = (CSharp + SqlserverDB) from Studentsinner join StudentClass on StudentClass.ClassId = Students.ClassIdinner join ScoreList on ScoreList.StudentId = Students.StudentIdorder by 总成绩 DESC-- 统计考试成绩,显示班级名称 C#平均分 按照班级分组进行实现select ClassName,CSharp平均分=AVG(CSharp),数据库平均分 = AVG(SqlserverDB) from ScoreListinner join Students on ScoreList.StudentId = ScoreList.StudentIdinner join StudentClass on StudentClass.ClassId = Students.ClassIdgroup by ClassNameorder by ClassNamego-- 调用存储过程exec usp_tes1
二:带参数的存储过程

查询考试成绩要求能够按照自定义的及格线查询结果?

 use SMDBgocreate procedure usp_test2-- 输入参数@cs int,-- csharp 及格线@db int -- 数据库及格线
as select Students.StudentId,StudentName,CSharp,SqlserverDB from ScoreListinner join Students on Students.StudentId = ScoreList.StudentIdwhere SqlserverDB > @csselect Students.StudentId,StudentName,CSharp,SqlserverDB from ScoreListinner join Students on Students.StudentId = ScoreList.StudentIdwhere SqlserverDB > @db
go exec usp_test2 68,80
exec usp_test2 @cs = 50,@db = 70
exec usp_test2 @db = 70,@cs = 50

http://www.lryc.cn/news/309318.html

相关文章:

  • 解决鸿蒙模拟器卡顿的问题
  • 【LeetCode每日一题】【BFS模版与例题】863.二叉树中所有距离为 K 的结点
  • 设计模式-结构模式-装饰模式
  • MySQL:一行记录如何
  • ‘grafana.ini‘ is read only ‘defaults.ini‘ is read only
  • 博途PLC 面向对象系列之“输送带控制功能块“(SCL代码)
  • 2024-02学习笔记
  • 最新消息:英特尔宣布成立全新独立运营的FPGA公司——Altera
  • RC正弦波振荡电路
  • 【Git学习笔记】提交PR
  • 线程池的相关参数
  • 图书推荐||Word文稿之美
  • 前端导出word文件的多种方式、前端导出excel文件
  • Linux和Windows操作系统在腾讯云幻兽帕鲁服务器上的内存占用情况如何?
  • 腾讯云4核8G的云服务器性能水平?使用场景说明
  • 1_SQL
  • PoC免写攻略
  • c1-周考2
  • express+mysql+vue,从零搭建一个商城管理系统7--文件上传,大文件分片上传
  • markdown的使用(Typora)
  • 【python】json转成成yaml中文编码异常显示成:\u5317\u4EAC\u8DEF123\u53F7
  • Python 实现Excel自动化办公(中)
  • MCTS代码
  • Java 中notify 和 notifyAll 方法介绍
  • Leetcode :杨辉三角
  • MWC 2024丨美格智能CEO杜国彬出席中国联通创新成果发布会并发表主题演讲
  • 个人建站前端篇(七)vite + vue3企业级项目模板
  • centos7 安装 docker-compose
  • 剑指offer面试题28:对称的二叉树
  • JS:原型与原型链(附带图解与代码)