WHILE設置重覆執行 SQL 語句或語句塊的條件。只要指定的條件為真,就重覆執行語句。可以使用 BREAK 和 CONTINUE 關鍵字在迴圈內部控制 WHILE 迴圈中語句的執行。 語法WHILE Boolean_expression { sql_statement | statement_bl ...
declare @i int set @i=1 while @i<30 begin insert into test (userid) values(@i) set @i=@i+1 end --------------- while 條件 begin 執行操作 set @i=@i+1 end --何問起 hovertree.com
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' /* 何問起 hovertree.com */
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 declare @i int declare @quxian varchar(2000),@city varchar(2000),@sheng varchar(2000),@hot int set @i=1 while @i<30 begin set @quxian='西湖' set @city='杭州' set @sheng='浙江' set @hot=@i insert into address (quxian,city,sheng,hot) values(@quxian,@city,@sheng,@hot) print @i set @i=@i+1 end /* hovertree.top */
推薦:http://www.cnblogs.com/roucheng/p/3541165.html