按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
执行了 也 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 中使用通配符的内容是在第 3 天的 表达式 条件与操作 中介绍的 LIKE
可以让你在 SQL 语句中使用通配符 通配符的使用增加了灵活性 在 TRANSACT…SQL 中
可供使用的通配符如下
l 下划线可以代表任何单个的字符 例如 _MITH 就是查询 5 个字符并且是以 MITH
结尾的
l 百分号可以代表一个或多个字符 例如 WILL%通配符可以返回 WILLIAMS 和
WILL
l 中括号可以匹配在括号内的字符 例如 'ABC'可以查询包括 A B C 的字符串
l 如果在中括号中使用了脱字符^ 那就是说匹配所有的字符但不包括中括号中给出
的 例如 '^ABC'表示查询所有的字符 除了 A B C
使用 PUTE 来生成摘要报告
TRANSACT…SQL 也具有生成摘要报告的能力 其命令为 PUTE 它的语法与它
在 SQL*PLUS 的语法极为相似 见第 20 天的 SQL*PULS
下边的查询将会产生关于所有击球手的报告 包括每个击球手的本垒数和所有击球手
总的本垒数
输入
select name; homeruns from batters pute sum(homeruns)
分析
在上一个例子中 PUTE 独自对报告进行了估算 然而 PUTE BY 则可以对
整个报告进行分组评估 如下例所示
语法
PUTE FUNCTION(expression) 'BY expression'
where the FUNCTION might include SUM; MAX; MIN; etc。 and
EXPRESSION is usually a column name or alias。
428
…………………………………………………………Page 429……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
日期转换
SYBASE 与 MICROSOFT SQL SERVER 可以向表中插入不同格式的日期 它们也可以
用不同的格式来表达日期 在这一部分将告诉你如何使用 SQL SERVER 的 CONVERT 来
实现多种形式的日期显示方法
语法
CONVERT (datatype '(length)'; expression; format)
在 SQL SERVER 中使用 CONVERT 时有下列日期格式是可用的
Format code Format picture
100 mon dd yyyy hh:miAM/PM
101 mm/dd/yy
102 yy。mm。dd
103 dd/mm/yy
104 dd。mm。yy
105 dd…mm…yy
106 dd mon yy
107 mon dd; yy
108 hh:mi:ss
109 mon dd; yyyy hh:mi:ss:mmmAM/PM
110 mm…dd…yy
111 yy/mm/dd
112 yymmdd
输入
select 〃PayDate〃 = convert(char(15); paydate; 107) from payment_table where customer_id = 012845
输出
PayDate
May 1; 1997
分析
在上例中使用的 CONVERT 转换格式中的 107 从上表中可以知道 107 将以 MON
DD YY 的形式显示日期
SQL SERVER 的诊断工具— — SET 命令
TRANSACT…SQL 提供了一系列的 SET 命令可以让你打开不同的选项以帮助分析
TRANSACT…SQL 的语句 这里给出了一些常见的 SET 命令
l SET STATISTICS IO ON 可以让服务器返回请示的物理和逻辑页数
429
…………………………………………………………Page 430……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
l SET STATISTICS TIME O 可以让服务器返回语句的运行时间
l SET SHOWPLAN ON 可以让服务器返回当前正在运行的计划中的查询
l SET NOEXEC ON 可以让服务器编译设计过的查询但不运行
l SET PARSONLY ON 可以让服务器对所设计的查询进行语法检查 但并不运行
TRANSACT…SQL 也提供下边的命令来帮助你对输出的显示进行控制
l SET ROWCOUNT N 可以让服务器只返回查询中的前 N 行
l SET NOCOUNT ON 不必报告查询所返回的行数
注 如果你对 TRANSACT…SQL 的语句调整比较关心 SQL 那么请参见第 15 天的 对 SQL
语句的优化以提高性能
总结
今天所讨论的主题增加了你对使用 SQL 编程的一些知识