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

SQL: 触发器/存储过程/游标的操作

目录

  • 触发器
  • 存储过程
    • 创建存储过程
    • 修改存储过程
    • 删除存储过程
    • 执行存储过程
  • 游标
  • 待续、更新中

触发器

待更新

存储过程

定义

是一组TSQL语句的预编译集合,能实现特定的功能
是一种独立的数据库对象,在服务器上创建和运行
类似于编程语言中的过程或函数

分类

系统存储过程:
是指由SQL Server提供的存储过程,可以作为命令执行
它定义在系统数据库master中
前缀: sp_用户存储过程
是由用户在当前数据库中创建的存储过程
最好不要以sp 开头, 若用户定义的存储过程与系统存储过程同名,用户定义的存储过程永远不会执行

变量

局部变量:用户自己定义的变量,用于在语句之间传递数据
局部变量名以@符号开头
全局变量名以@@符号开头注意:局部变量未被赋值之前,其值为u川

定义变量

一个整型变量和两个字符型变量
declare  @name varchar(10)
declare @age smallint, @msg  varchar(50)

赋值

局部变量的赋值
set  @变量=表达式
select   @变量=表达式注意: 
select语句不能同时完成赋值和查询两种操作区别:
set @变量=表达式 用于将表达式的值直接赋给变量
select @变量=表达式 用于从查询结果中选择某一列或表达式的值赋给变量

局部变量的显示

print   表达式   ( 注意: 必须是char、varchar;或可以隐式地 转化成字符型的常量或变量表达式)
select  表达式例子:
显示@age、@name的值
print   @name
print   @age
select  @name as 姓名,@age 年龄

DECLARE @counter int;
SELECT  @counter=0 ;
WHILE  @counter<10   --WHILE 循环
BEGIN   --循环体开始
SELECT @counter=@counter+1
PRINT  @counter
end    --循环体结束

流程控制语句概述:

begin..end语句   //语句块
if...else语句
while、break和continue语句
goto     //转移语句
return语句   
waitfor语句

创建存储过程

  1. 格式:

    create proc p1 – p1为存储过程名
    as
    sql 语句
    go
    exec p1 – 执行存储过程

例:

/*
创建1个简单的存储过程p1 ,查询所有学生的学号,
姓名、课程号和成绩信息,并按成绩降序排列
*/create  procedure p1
as
select Student.Sno,  Sname ,Cno, Grade
from Student,SC
where Student.Sno=SC.Sno
order by Sno desc
go
exec  p1  
  1. 带参数格式:

    create proc 为存储过程名
    @形参 数据类型[=默认值],…
    as
    SQL语句

执行格式:

exec  存储过程名
[@实参=]值,.....n

例如:
创建1个带有输入参数的存储过程p2,查询指定课程号(作为输入参数)的学生成绩信息

create proc p2
@kch char(4)='1'   ----有默认值的输入形参:接收外部传递的数据
as
select  *  from Sc where Cno=@kch
go 
exec  p2  --(1)使用默认值执行存储过程
exec p2  '2'  ---(2)按位置传递参数 (输入实参:将数据传递给存储过程)
exec  p2 @kch='3'   --(3)通过参数名传递参数  (输入实参:将数据传递给存储过程)
  1. 使用输出参数

创建格式:
带[ ] 内容为可选内容,即 可写可不写

create proc[edure]   存储过程名
@形参  数据类型   output,...n    ( 输出形参:将数据返回给调用它的程序 )
as
SQL语句

执行格式:

exec[ute]  存储过程名
@实参   output ,...n  ( 输出实参:接收从存储过程返回的数据  ) 

说明:

输出实参和输出形参的名字可以相同,也可以不同
使用时,要先声明接收返回值的输出实参变量
·

例:

-- 创建1个带有输入参数和输出的存储过程p4,返回指定教师(作为输入参数) 所授课程的课程号(作为输出参数)
create proc p4
@Sname varchar(20),@Sno char(9) output
as
select @Sno=Sno  from Student where Sname=@Sname
go
declare @Sname varchar(20),@Sno char(9)
set @Sname='李勇'
exec p4 @Sname,@Sno output
print @Sname+ '学号为: '+ @Sno

修改存储过程

在这里插入图片描述

删除存储过程

在这里插入图片描述

执行存储过程

-- 执行存储过程
EXEC p1_存储过程;-- 执行带参数的存储过程
EXEC p1_存储过程 @参数名 = 参数值;

游标

游标,一个执行结果的数据缓冲区

解决java 等编程语言一句一句执行命令 
与
sql 语言执行多条命令
之间不匹配进行解决该问题

使用游标

声明游标
declare cursor_name打开游标
open cursor_name提取数据
fetch ** from cursor_name into 变量
@@fetch_status,返回针对连接当前打开的任何游标发出的上一条游标 fetch语句的状态0  fetch语句成功
-1  fetch语句失败或行不在结果集中
-2  提取的行不存在关闭游标
close cursor_name
删除游标资源,释放内存: deallocate  cursor_name

待续、更新中

 
 
—————————————————————
以上就是今日博客的全部内容了
创作不易,若对您有帮助,可否点赞、关注一二呢,感谢支持

相关文章:

  • System类 --java学习笔记
  • 拍立淘API:助力电商企业快速定位目标客户
  • websocket 使用示例
  • 实现QT中qDebug()的日志重定向
  • GPT-prompt大全
  • 【DevOps基础篇】容器化架构基础设施监控方案
  • 20240312-2-贪心算法
  • 基于Qt 和python 的自动升级功能
  • Docker:部署微服务集群
  • 在没有推出硬盘的情况下,重启mac电脑,外接移动硬盘无法加载显示?
  • 国内哪个工具可以平替chatgpt?国内有哪些比较好用的大模型gpt?
  • ‘UnityEngine.Application‘ does not contain a definition for isBatchMode
  • 迷茫了!去大厂还是创业?
  • 从零开始:神经网络(1)——神经元和梯度下降
  • Covalent Network (CQT) 通过统一 API 集成,为 Gnosis Chain 的 AI 潜力赋能
  • 深入了解以太坊
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 「面试题」如何实现一个圣杯布局?
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 4个实用的微服务测试策略
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Elasticsearch 参考指南(升级前重新索引)
  • FineReport中如何实现自动滚屏效果
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • JavaScript异步流程控制的前世今生
  • MQ框架的比较
  • QQ浏览器x5内核的兼容性问题
  • 包装类对象
  • 大快搜索数据爬虫技术实例安装教学篇
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 浅谈Golang中select的用法
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 区块链技术特点之去中心化特性
  • 智能网联汽车信息安全
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​TypeScript都不会用,也敢说会前端?
  • # C++之functional库用法整理
  • (1)(1.9) MSP (version 4.2)
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (独孤九剑)--文件系统
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (三)c52学习之旅-点亮LED灯
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)拼包函数及网络封包的异常处理(含代码)
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .net分布式压力测试工具(Beetle.DT)
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @media screen 针对不同移动设备
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [\u4e00-\u9fa5] //匹配中文字符