在这里先介绍几个和编程有管的术语。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
变量: 可以变化的量,存放于内存中,由变量名和变量值
常量: 固定不变的量
变量的操作: 先声明变量。
语法为: 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= ‘<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /> 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
If @h*4+(100-@h)*0.25=100
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
转载于:https://blog.51cto.com/guoweishuai/245466