• 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#平均分 数据库平均分 按照班级的分组来进行实现
    1. use SMDB
    2. go
    3. -- 如果已经存在 usp_test1存储过程 就先删除这个存储过程
    4. if exists(select * from sysobjects where name ='usp_test1')
    5. drop procedure usp_tes1
    6. go
    7. -- 定义存储过程
    8. create procedure usp_tes1
    9. as
    10. -- sql语句
    11. -- 查询考试成绩,显示学号姓名班级总成绩,并按照成绩总分高低排序
    12. select Students.StudentId,StudentName,ClassName,总成绩 = (CSharp + SqlserverDB) from Students
    13. inner join StudentClass on StudentClass.ClassId = Students.ClassId
    14. inner join ScoreList on ScoreList.StudentId = Students.StudentId
    15. order by 总成绩 DESC
    16. -- 统计考试成绩,显示班级名称 C#平均分 按照班级分组进行实现
    17. select ClassName,CSharp平均分=AVG(CSharp),数据库平均分 = AVG(SqlserverDB) from ScoreList
    18. inner join Students on ScoreList.StudentId = ScoreList.StudentId
    19. inner join StudentClass on StudentClass.ClassId = Students.ClassId
    20. group by ClassName
    21. order by ClassName
    22. go
    23. -- 调用存储过程
    24. exec usp_tes1
    二:带参数的存储过程

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

    1. use SMDB
    2. go
    3. create procedure usp_test2
    4. -- 输入参数
    5. @cs int,-- csharp 及格线
    6. @db int -- 数据库及格线
    7. as
    8. select Students.StudentId,StudentName,CSharp,SqlserverDB from ScoreList
    9. inner join Students on Students.StudentId = ScoreList.StudentId
    10. where SqlserverDB > @cs
    11. select Students.StudentId,StudentName,CSharp,SqlserverDB from ScoreList
    12. inner join Students on Students.StudentId = ScoreList.StudentId
    13. where SqlserverDB > @db
    14. go
    15. exec usp_test2 68,80
    16. exec usp_test2 @cs = 50,@db = 70
    17. exec usp_test2 @db = 70,@cs = 50

  • 相关阅读:
    23设计模式之 --------- 什么是设计模式?
    【JDK 8-集合框架进阶】6.1 parallelStream 并行流
    GEE|时间序列分析(一)
    CORE EMU初接触
    我服了!SpringBoot升级后这服务我一个星期都没跑起来!(下)
    抖音矩阵系统源码,抖音矩阵系统,抖音SEO源码。、
    h5兼容问题 复制粘贴移动端无法粘贴复制内容
    vue3 依赖注入provide/inject
    备考新境界:考研竞争中的超级助推器,让AIGC点亮你的学术之路!
    docker启动出现Error response from daemon: Cannot restart container的报错
  • 原文地址:https://blog.csdn.net/lu2023_8_6/article/details/136306658