Sql 编程.九
原创
©著作权归作者所有:来自51CTO博客作者guoweishuai123的原创作品,如需转载,请与作者联系,否则将追究法律责任
在这里先介绍几个和编程有管的术语。
变量:可以变化的量,存放于内存中,由变量名和变量值
常量:固定不变的量
变量的操作:先声明变量。
语法为:declare 变量名 变量类型
目的:为了在内存中分配相应的空间。
例:声明变量用于存放姓名。
Uname 可变字符型 8个字符
如:declare @uname varchar(8)
Sql规定:所有的用户变量必须以@开头
所有的系统变量必须以@@开头。
一.常用的系统变量。
@@version 用于显示当前的sql server 版本号
例:select @@version

@@servername 用于显示当前数据库服务器的名称
例select @@servername

变量赋值:
Set 变量名=值 或者select 变量名=值
例:set @uname=‘小文’
输出变量值
Print 变量名
例:print @uname
综合起来有一个小实例。
语法为:
Declare @uname varchar(8)
Declare @score int
Set @uname=‘小文’
Set @score=‘90’
Print @uname
Print @score
Print @uname
我相信大家能明白上面的语法是什么意思。

程序的三种基本执行结构。
顺序:
分支:单分支和双分支
循环:
特殊:go to 强制跳转
一.我们先来看看单分支的操作。
语法为:简单的
If 条件
Begin
Sql 语句
End
条件:只有两种结果:真和假
例如:看一个小实例,判断成绩是否及格。
Declare @score int
Set @score=60
If @score>=60
Begin
Print ‘及格了!!!’
end

标准的语法为:
If 条件
Begin
Print sql 语句一
End
Else
Begin
Print sql 语句二
End
分析:判断条件是否成立,如果成立,则执行语句一,如果不成立则执行语句二。
语句一和语句二是不可能同时执行的或也不可能同时不执行。
例1:判断成绩是否及格,大于等于60及格,否则是不及格。
Declare @a int
Set @a=55
If @a>60
Begin
Print ‘不及格’
End
Else
Begin
Print ‘及格了’
end

例2.判断成绩小于60不及格 60-70及格 71-80良好 81-100优秀。
语法为:
declare @y int
set @y=87
if @y<60
begin
print '不及格'
end
else
begin
if @y>60 and @y<70
begin
print '及格'
end
else
begin
if @y>71 and @y<80
begin
print '良好'
end
else
begin
print '优秀'
end
end
end

多分支:
语法为:
Case 字段名/变量名
When 值1 then 表达式1
When 值2 then 表达式2
………………..
When 值n then 表达式n
【else 表达式m】
End
例1.在这里用到如下图类型的表,表名为shuai

Vip:0为游客,1为会员,2为贵宾,其他
用户名 身份
Gwsh 游客
Li 其他
Lch 会员
Wjl 贵宾
Wp 其他
语法为:
Select uname,case vip
When 0 then ‘游客’
When 1 then ‘会员’
When 2 then ‘贵宾’
Else ‘其他’
End as guo from shuai

例2.按级别上调工资。用yuangong表那个类型的。
级别1 高级工程师 上调8%
级别2 普通工程师 上调6%
级别3 员工 上调4%
其它 上调2%
语法为:
Update yuangong set 工资=
Case 工作级别
When 1 then 工资*1.08
When 2 then 工资*1.06
When3 then 工资*1.04
Else 工资*1.02
end
上调前的yuangong表如下图所示,
上调后的yuangong表。

二.循环。
语法为:
While 条件
Begin
Sql 语句 又称为(循环体)
End
例1.输出1.2.3.4.5.6….100
Declare @s int
Set @s=1
While @s<100
Begin
Print @s
Ser @s=@s+1
end
例2.1+2+3+4+5+6……+99+100=5050
declare @a int,@s int
set @a=1
set @s=0
while @a<=100
begin
set @s=@s+@a
set @a=@a+1
end
print '1+2+3+4+5+6...+99+100='+cast
(@s as varchar(5))
例1. 经典案例“鸡兔同笼”
今有鸡,兔同笼,上有36个头,下有94爪,问鸡兔各有多少只。
Declare @j int
Set @j=1
While @j<=36
Begin
If @j*2+(36-@j)*4=94
Begin
Print @j
Print 36-@j
End
Set @j=@j+1
end
例1. 现有和尚100人,馒头100个,大和尚一人吃4个,小和尚4个人吃一个,大小和尚各几个。
Declare @h int
Set @h=1
While @h<=100
Begin
Begin
Print @h
Print 100-@h
End
Set @h=@h+1
end
例1. 水仙花数。
Declare @s int,@a int,@b int,@c int
Set @s=1
While @s<1000
Begin
Set @a=@s/100
Set @b=(@s-@a*100)/10
Set @c=@s-@a*100-@b*10
If @s=@c*@c*@c+@b*@b*@b+@a*@a*@a
Begin
Print @s
End
Set @s=@s+1
end
例四.做一个正立的等腰三角形。
Declare @a int,@b int,@s varchar(100)
Set @a=1
While @a<=4
Begin
Set @b=1
Set @s=‘’
While @b<=2*@a-1
Begin
Set @s=@s+‘*’
Set @b=@b+1
End
Print space(40-@a)+@s
Set @a=@a+1
end