ITPUB??ì3
ITPUB论坛 » MS SQL Server » SQL Server 2000中是否有FOR 循环语句???

标题: SQL Server 2000中是否有FOR 循环语句???
离线 etqxq
中级会员



精华贴数 1
个人空间 0
技术积分 825 (2254)
社区积分 0 (70567)
注册日期 2002-11-29
论坛徽章:0
      
      

发表于 2004-3-7 15:32 
SQL Server 2000中是否有FOR 循环语句???

for i=0,i++,i<@num

select dateadd(DAY,GETDATE(),I)


请问上面的语句怎么改写才正确???

感谢!!!

etqxq@hotmail.com


__________________
qxq
只看该作者    顶部
离线 ccwlm741212
老男人


精华贴数 40
个人空间 0
技术积分 31272 (27)
社区积分 51156 (9)
注册日期 2002-11-25
论坛徽章:95
      
      

发表于 2004-3-7 18:37 
Transact-SQL 参考


WHILE
设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。

语法
WHILE Boolean_expression
    { sql_statement | statement_block }
    [ BREAK ]
    { sql_statement | statement_block }
    [ CONTINUE ]

参数
Boolean_expression

返回 TRUE 或 FALSE 的表达式。如果布尔表达式中含有 SELECT 语句,必须用圆括号将 SELECT 语句括起来。

{sql_statement | statement_block}

Transact-SQL 语句或用语句块定义的语句分组。若要定义语句块,请使用控制流关键字 BEGIN 和 END。

BREAK

导致从最内层的 WHILE 循环中退出。将执行出现在 END 关键字后面的任何语句,END 关键字为循环结束标记。

CONTINUE

使 WHILE 循环重新开始执行,忽略 CONTINUE 关键字后的任何语句。

注释
如果嵌套了两个或多个 WHILE 循环,内层的 BREAK 将导致退出到下一个外层循环。首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。

示例
A. 在嵌套的 IF...ELSE 和 WHILE 中使用 BREAK 和 CONTINUE
在下例中,如果平均价格少于 $30,WHILE 循环就将价格加倍,然后选择最高价。如果最高价少于或等于 $50,WHILE 循环重新启动并再次将价格加倍。该循环不断地将价格加倍直到最高价格超过 $50,然后退出 WHILE 循环并打印一条消息。

USE pubs
GO
WHILE (SELECT AVG(price) FROM titles) < $30
BEGIN
   UPDATE titles
      SET price = price * 2
   SELECT MAX(price) FROM titles
   IF (SELECT MAX(price) FROM titles) > $50
      BREAK
   ELSE
      CONTINUE
END
PRINT 'Too much for the market to bear'

B. 在带有游标的过程中使用 WHILE
以下的 WHILE 结构是名为 count_all_rows 过程中的一部分。下例中,该 WHILE 结构测试用于游标的函数 @@FETCH_STATUS 的返回值。因为 @@FETCH_STATUS 可能返回 –2、-1 或 0,所以,所有的情况都应进行测试。如果某一行在开始执行此存储过程以后从游标结果中删除,将跳过该行。成功提取 (0) 后将执行 BEGIN...END 循环内部的 SELECT 语句。

USE pubs
DECLARE tnames_cursor CURSOR
FOR
   SELECT TABLE_NAME
   FROM INFORMATION_SCHEMA.TABLES
OPEN tnames_cursor
DECLARE @tablename sysname
--SET @tablename = 'authors'
FETCH NEXT FROM tnames_cursor INTO @tablename
WHILE (@@FETCH_STATUS <> -1)
BEGIN
   IF (@@FETCH_STATUS <> -2)
   BEGIN   
      SELECT @tablename = RTRIM(@tablename)
      EXEC ('SELECT ''' + @tablename + ''' = count(*) FROM '
            + @tablename )
      PRINT ' '
   END
   FETCH NEXT FROM tnames_cursor INTO @tablename
END
CLOSE tnames_cursor
DEALLOCATE tnames_cursor


请参见

ALTER TRIGGER

控制流语言

CREATE TRIGGER

游标

SELECT

©1988-2000 Microsoft Corporation。保留所有权利。


__________________
参悟佛理~~智慧做人~~谈泊明心~~宽容博大~~除妄去执~~知恩重义


只看该作者    顶部
离线 lynx286
陈永仁


精华贴数 0
个人空间 0
技术积分 1651 (1004)
社区积分 151 (2695)
注册日期 2003-7-23
论坛徽章:10
现任管理团队成员ITPUB元老管理团队2007贡献徽章参与2007年甲骨文全球大会(中国上海)纪念管理团队2006纪念徽章会员2007贡献徽章
会员2006贡献徽章授权会员生肖徽章2007版:龙ITPUB新首页上线纪念徽章  

发表于 2004-3-8 08:34 
declare @i int,
        @num int
set @i=1
set @num=20
while @i<@num
begin
select dateadd(DAY,@i,GETDATE())
set @i=@i+1
end


__________________
只看该作者    顶部
离线 etqxq
中级会员



精华贴数 1
个人空间 0
技术积分 825 (2254)
社区积分 0 (70567)
注册日期 2002-11-29
论坛徽章:0
      
      

发表于 2004-3-8 15:09 
感谢大家的回复!

我已经搞定此问题,
祝大家工作顺利!!
          身体健康!!!


__________________
qxq
只看该作者    顶部
离线 woodlin
一般会员



精华贴数 0
个人空间 0
技术积分 342 (5638)
社区积分 0 (104842)
注册日期 2004-2-6
论坛徽章:0
      
      

发表于 2004-3-9 08:46 
我昨天也刚用过这语句,很好用。


只看该作者    顶部
离线 piaoye123
一般会员



精华贴数 0
个人空间 0
技术积分 188 (9825)
社区积分 0 (929943)
注册日期 2006-5-15
论坛徽章:0
      
      

发表于 2006-11-23 14:06 
我怎麼沒起作用呢?
alter procedure time_by
as
Declare @Count Int
Set @Count=1099
While @Count>=4298
Begin
update Time_by_day set Time_ID=(@Count-1098) where Time_ID=@Count
Set @Count=@Count+1
CONTINUE
End

execute time_by


__________________
BI,真的不懂
只看该作者    顶部
离线 hincorany
一般会员



精华贴数 0
个人空间 0
技术积分 148 (12099)
社区积分 0 (1173133)
注册日期 2006-11-9
论坛徽章:0
      
      

发表于 2006-11-24 10:01 


QUOTE:
最初由 piaoye123 发布
我怎麼沒起作用呢?
alter procedure time_by
as
Declare @Count Int
Set @Count=1099
While @Count>=4298
Begin
update Time_by_day set Time_ID=(@Count-1098) where Time_ID=@Count
Set @Count=@Count+1
CONTINUE
End

execute time_by


初值1099就不满足@count>=4298当然不执行循环
另外continue在你的存储过程中没用……
那个是用在你要跳过循环内后面的语句继续循环才用的。


__________________
保护环境珍爱自然愿平衡与您同在
只看该作者    顶部
离线 brage


来自 上海
精华贴数 0
个人空间 0
技术积分 44 (30461)
社区积分 0 (1753359)
注册日期 2008-4-18
论坛徽章:0
      
      

发表于 2008-6-15 22:45 
感觉挺好用的
现在如果某字段中出现相同的值,如何用循环现实该字段相同字段值的操作?例如:
id      name
1         a
1         b
1         c
2          d
2          e
结果为:
id      name
1       abc
2         de


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问