《SQL 21日自学通(V3.0)(PDF格式)》第134章


为 TRANSACT…SQL 所运行的另一种流行的编程结构是 WHILE 循环 该命令的语法 
如下 
语法 
WHILE logical_expression 
statement(s) 
例 19。7 
WHILE 将一直循环到所给出的逻辑表达式值为假时为止 本例中使用了一个简单的 
WHILE 循环来增加一个名字为 COUNT 的局部变量 
输入 
1》 declare @COUNT int 
2》 select @COUNT = 1 
3》 while (@COUNT 《 10) 
4》 begin 
5》 select @COUNT = @COUNT + 1 
6》 print 〃LOOP AGAIN!〃 
7》 end 
8》 print 〃LOOP FINISHED!〃 
注 上例实际上是一个简单的 FOR 循环 在一些其它的解释器如 ORACLE 的 PL/SQL 中 
确实提供一名称为 FOR 的循环方式 你应该检查你的系统看它是否支持这种循环方式 
BREAK 命令 
注意 BREAK 语句应该在 IF 条件语句中出现 
424 
…………………………………………………………Page 425……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
输入 
1》 declare @COUNT int 
2》 select @COUNT = 1 
3》 while (@COUNT 《 10) 
4》 begin 
5》 select @COUNT = @COUNT + 1 
6》 if (@COUNT = 8) 
7》 begin 
8》 break 
9》 end 
10》 else 
11》 begin 
12》 print 〃LOOP AGAIN!〃 
13》 end 
14》 end 
15》 print 〃LOOP FINISHED!〃 
分析 
在这个例子中当 COUNT 的值为 8 时 BREAK 将导致循环的退出 
COUNTINUE 命令 
COUNTINUE 命令也是一个可以在 WHILE 循环中执行的特殊命令 它会令循环立即 
从 BEGIN 处开始 也就是说这时 WHILE 将不再执行其模块中余下的部分而是立即从开始 
执行了 也 BREAK 命令一样 COUNTINUE 也应该在 IF 条件语句中出现 如例 19。9 所 
示 
例 19。9 
注意 这里的 COUNTINUE 也是放在 IF 之中的 
输入 
425 
…………………………………………………………Page 426……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
1》 declare @COUNT int 
2》 select @COUNT = 1 
3》 while (@COUNT 《 10) 
4》 begin 
5》 select @COUNT = @COUNT + 1 
6》 if (@COUNT = 8) 
7》 begin 
8》 continue 
9》 end 
10》 else 
11》 begin 
12》 print 〃LOOP AGAIN!〃 
13》 end 
14》 end 
15》 print 〃LOOP FINISHED!〃 
分析 
除了用 COUNTINUE 替换了 BREAK 以外 例 19。9 与 19。8 是一样的 与当 COUNT=8 
时即出循环不同 本例只是跳到的循环的起使部分继续执行 
使用 WHILE 循环在表中翻阅 
SQL SERVER 与与其它的数据库系统都有一个特殊类型的对象— — 游标 它可以让你 
一次一行地翻阅表中的记录 参见第 13 天 但是 有一些数据库系统 包括 SQL SERVER 
PER…SYSTEM 10 都不支持翻阅游标的使用 在例 19。10 中我们给出了如果系统不支持游 
标是如何使用 WHILE 循环来实现简单的游标功能 
例 19。10 
你可以使用 WHILE 循环来一次一个地翻阅表中的记录 TRANSACT…SQL 所存储的 
ROWCOUNT 数值可以告诉 SQL SERVER 一次从查询中返回一条记录 如果你使用的是其 
它的数据库产品 那么你需要确认一下该产品是否有与之类似的设置 通过设置 
426 
…………………………………………………………Page 427……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
ROWCOUNT 的值为 1 默认值为 0 也就是不受限制 SQL SERVER 可以一次只从查询 
中返回一条记录 你可以使用这条记录来进行你想要的任何操作 当将一个表的内容存入 
临时表然后将其删除时 你就可以一次选择一行 在你工作结束后将它删除 当表中的所 
有行都被选择出以后 你就将表中的所有行都删除了 所以我们说它只实现了非常简单的 
游标功能 现在让我们来运行一个这个例子 
输入 
1》 set rowcount 1 
2》 declare @PLAYER char(30) 
3》 create table temp_BATTERS ( 
4》 NAME char(30); 
5》 TEAM int; 
6》 AVERAGE float; 
7》 HOMERUNS int; 
8》 RBIS int) 
9》 insert temp_BATTERS 
10》 select * from BATTERS 
11》 while exists (select * from temp_BATTERS) 
12》 begin 
13》 select @PLAYER = NAME from temp_BATTERS 
14》 print @PLAYER 
15》 delete from temp_BATTERS where NAME = @PLAYER 
16》 end 
17》 print 〃LOOP IS DONE!〃 
分析 
注意 当你设置了 ROWCOUNT 的数值以后 你只是改变了从 SELECT 语句中返回的 
行数 如果 DELETE 命令的 WHERE 子句返回了 5 条记录的话 那么 5 行都将被删除 同 
时也要注意 ROWCOUNT 也可以在循环重设 因此 在这个循环中 你可以通过重新设置 
ROWCOUNT 的值来查询数据库中的一些其它的信息 
427 
…………………………………………………………Page 428……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
TRANSACT…SQL 中的通配符 
在 SQL 中使用通配符?
小说推荐
返回首页返回目录