【数据库】存储过程

存储过程/函数:procedure/function

通俗说,存储过程是个模块化的程序段,完成一定功能,可被反复调用,可用于解决复杂的问题,减少程序冗余度。

这里的过程和函数就是C语言的方法/函数。过程一般不直接返回值,但可以通过实参和形参返回给主调程序计算结果;函数在SQLSERVER中,它都要返回一个值。(统一看,C语言中的返回void的函数在这里叫过程,有返回类型值的函数在这里叫函数)

程序的流程

变量的定义

Declare @变量名 类型[(宽度),类型…..]

为了区分系统内存变量(包括表的列名和系统环境参数)和用户自定义变量,要求用户自定义变量时前加@符号。当打开一个表时,表的所有列名如学号,姓名是变量,控制系统内部的参数设置的量也是变量-----系统变量和列变量。

如要定义一个自定义变量保存杨春同学学号:

declare @xh nchar(10)
select @xh=学号 from 学生表 where 姓名='杨春'
print @xh

为什么要用@xh,而不是xh,因为表列名有可能是“xh”,这是为了避免冲突误会。修改上面程序段,也正确:

declare @学号 nchar(10)
select @学号=学号 from 学生表 where 姓名='杨春'
print @学号

赋值

Set @变量名=/表达式
Select @变量名=/表达式 from 表…..

例:定义变量存放性别和姓氏,把这些变量代入查询语句并输出结果

declare @xs nchar(1),@xb nchar(1)
 set @xs='李'
 set @xb='男'
 select * from 学生表 where left(姓名,1)=@xs and 性别=@xb

例:如果在C#/java中如何拼凑这个查询命令? 字符串和日期常量数据都要加单引号,数值型不加

String s=”select * from 学生表 where left(姓名,1)=’”+xs+”’  and 性别=’”+xb+”’ and 身高>”+sg;

利用上例的数据,S的结果:

select * from 学生表 where left(姓名,1)=’李’ and 性别=’男’ and 身高>175

分支结构

if else

格式:只能用在过程或函数中,不能嵌套到其它sql命令中。

If(条件)
 Begin
  成立时语句序列
 End
Else
 Begin
  条件不成立时的语句序列
 End

begin …end ,等效于C语句中{ }; 当语句序列退化成一句时,这个begin…end是可以省写的。

例:根据姓名(@xm变量)查询此人101课程的成绩值,再根据本成绩值判断等级,[80,100]为优秀,[60,80)为合格,60以下为不合格.

declare @xm nchar(10),@cj int,@dj nchar(3)
set @xm='李大方'

select @cj=成绩 from 成绩表 where 课程号='101' and 学号=(select 学号 from 学生表 where 姓名=@xm)

if(@cj 
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhugenmi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值