目录
触发器
bash
待更新
存储过程
定义
是一组TSQL语句的预编译集合,能实现特定的功能
是一种独立的数据库对象,在服务器上创建和运行
类似于编程语言中的过程或函数
分类
系统存储过程:
是指由SQL Server提供的存储过程,可以作为命令执行
它定义在系统数据库master中
前缀: sp_
用户存储过程
是由用户在当前数据库中创建的存储过程
最好不要以sp 开头, 若用户定义的存储过程与系统存储过程同名,用户定义的存储过程永远不会执行
变量
局部变量:用户自己定义的变量,用于在语句之间传递数据
局部变量名以@符号开头
全局变量名以@@符号开头
注意:局部变量未被赋值之前,其值为u川
定义变量
一个整型变量和两个字符型变量
sql
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 年龄
例
sql
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语句
创建存储过程
-
格式:
create proc p1 -- p1为存储过程名
as
sql 语句
go
exec p1 -- 执行存储过程
例:
sql
/*
创建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
-
带参数格式:
create proc 为存储过程名
@形参 数据类型[=默认值],...
as
SQL语句
执行格式:
exec 存储过程名
[@实参=]值,.....n
例如:
创建1个带有输入参数的存储过程p2,查询指定课程号(作为输入参数)的学生成绩信息
sql
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)通过参数名传递参数 (输入实参:将数据传递给存储过程)
- 使用输出参数
创建格式:
带[ ] 内容为可选内容,即 可写可不写
create proc[edure] 存储过程名
@形参 数据类型 output,...n ( 输出形参:将数据返回给调用它的程序 )
as
SQL语句
执行格式:
exec[ute] 存储过程名
@实参 output ,...n ( 输出实参:接收从存储过程返回的数据 )
说明:
输出实参和输出形参的名字可以相同,也可以不同
使用时,要先声明接收返回值的输出实参变量
·
例:
sql
-- 创建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
修改存储过程
删除存储过程
执行存储过程
sql
-- 执行存储过程
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
待续、更新中
以上就是今日博客的全部内容了
创作不易,若对您有帮助,可否点赞、关注一二呢,感谢支持