SQLServer技术(16)

来源:互联网 发布:免费恢复数据软件 编辑:程序博客网 时间:2024/06/08 13:12
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

Transact-SQL语言使用的流程控制命令与常见的程序语言类似主要有以下几种控制命令。

4.6.1IF…ELSE
其语法如下:
IF<条件表达式>
<命令行或程序块>
[ELSE[条件表达式]
<命令行或程序块>]
其中<条件表达式>可以是各种表达式的组合,但表达式的值必须是逻辑值“真”或“假”。ELSE子句是可选的,最简单的IF语句没有ELSE子句部分。IF…ELSE用来判断当某一条件成立时执行某段程序,条件不成立时执行另一段程序。如果不使用程序块,IF或ELSE只能执行一条命令。IF…ELSE可以进行嵌套。

例4-9
declare@xint,@yint,@zint
select@x=1,@y=2,@z=3
if@x>@y
  print'x>y'--打印字符串'x>y'
elseif@y>@z
print'y>z'
    elseprint'z>y'
运行结果如下
z>y
注意:在Transact-SQL中最多可嵌套32级。

4.6.2BEGIN…END
其语法如下:
BEGIN
<命令行或程序块>
END
BEGIN…END用来设定一个程序块,将在BEGIN…END内的所有程序视为一个单元执行BEGIN…END经常在条件语句,如IF…ELSE中使用。在BEGIN…END中可嵌套另外的BEGIN…END来定义另一程序块。

4.6.3CASE
CASE命令有两种语句格式:
CASE<运算式>
WHEN<运算式>THEN<运算式>

WHEN<运算式>THEN<运算式>
[ELSE<运算式>]
END

CASE
WHEN<条件表达式>THEN<运算式>
WHEN<条件表达式>THEN<运算式>
[ELSE<运算式>]
END
CASE命令可以嵌套到SQL命令中。
例4-10:调整员工工资,工作级别为“1”的上调8%,工作级别为“2”的上调7%,工作级别为“3”的上调6%,其它上调5%。
usepangu
updateemployee
sete_wage=
case
whenjob_level=’1’thene_wage*1.08
whenjob_level=’2’thene_wage*1.07
whenjob_level=’3’thene_wage*1.06
elsee_wage*1.05
end
注意:执行CASE子句时,只运行第一个匹配的子名。

4.6.4WHILE…CONTINUE…BREAK
其语法如下:
WHILE<条件表达式>
BEGIN
<命令行或程序块>
[BREAK]
[CONTINUE]
[命令行或程序块]
END
WHILE命令在设定的条件成立时会重复执行命令行或程序块。CONTINUE命令可以让程序跳过CONTINUE命令之后的语句,回到WHILE循环的第一行命令。BREAK命令则让程序完全跳出循环,结束WHILE命令的执行。WHILE语句也可以嵌套。

例4-11:
declare@xint@yint@cint
例4-11:
declare@xint,@yint,@cint
select@x=1,@y=1
while@x<3
begin
print@x--打印变量x的值
while@y<3
begin
select@c=100*@x+@y
print@c--打印变量c的值
select@y=@y+1
end
select@x=@x+1
select@y=1
end
运行结果如下
1
101
102
2
201
202

4.6.5WAITFOR
其语法如下:
WAITFOR{DELAY<‘时间’>|TIME<‘时间’>
|ERROREXIT|PROCESSEXIT|MIRROREXIT}
WAITFOR命令用来暂时停止程序执行,直到所设定的等待时间已过或所设定的时间已到才继续往下执行。其中‘时间’必须为DATETIME类型的数据,如:‘11:15:27’,
但不能包括日期各关键字含义如下:

DELAY用来设定等待的时间最多可达24小时;TIME用来设定等待结束的时间点;ERROREXIT直到处理非正常中断;PROCESSEXIT直到处理正常或非正常中断;MIRROREXIT直到镜像设备失败。

例4-12等待1小时2分零3秒后才执行SELECT语句
waitfordelay’01:02:03’
select*fromemployee

例4-13:等到晚上11点零8分后才执行SELECT语句
waitfortime’23:08:00’
select*fromemployee

4.6.6GOTO
语法如下:
GOTO标识符
GOTO命令用来改变程序执行的流程,使程序跳到标有标识符的指定的程序行再继续往下执行。作为跳转目标的标识符可为数字与字符的组合,但必须以“:”结尾,如‘12:’或‘a_1:’。在GOTO命令行,标识符后不必跟“:”。
例4-14分行打印字符‘1’、‘2’、‘3’、‘4’、‘5’
declare@xint
select@x=1
label_1
print@x
select@x=@x+1
while@x<6
gotolabel_1

4.6.7RETURN
语法如下
RETURN[整数值]
RETURN命令用于结束当前程序的执行,返回到上一个调用它的程序或其它程序。在括号内可指定一个返回值。
例4-15
declare@xint@yint
select@x=1@y=2
ifx>y
return1
else
return2
如果没有指定返回值,系统会根据程序执行的结果返回一个内定值,如
表4-5所示。

1
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击