iThome online | iThome Blog | iThome周刊訂閱

載入中...

alexc

IT邦好手
9級

使用流程控制:WHILE、BREAK 與 CONTINUE
標籤:鐵人賽 sql

不管哪一種語言都具備流程控制的功能,用來控制程式執行與流程的流向,透過流程控制可以讓程式更容易維護。
這次我們要討論經常與 WHILE 合用的兩個 T-SQL 陳述式:BREAK 與 CONTINUE。



收到書籤:發佈到twitter      
分享時間:2008-09-11 00:04:27

▼ ADVERTISEMENT ▼

分享內容(
9

BREAK 陳述式可以從最內層的 WHILE 迴圈離開,而 CONTINUE 陳述式則是重新執行 WHILE 迴圈。換句話說,就是當找不到符合的資料時,程式會執行 BREAK 的那段陳述式;而如果需要繼續執行程式碼,自然就會執行 CONTINUE 那段陳述式。

先來個簡單的例子,計算從 1 加到 100 的總和好了:

-- 定義變數
DECLARE @count int, @sum int

-- 指定初始值
SET @count = 0
SET @sum = 0

-- 開始計算
WHILE (@count < 101)
	BEGIN
		SET @sum = @sum + @count
		SET @count = @count + 1
	END

-- 顯示結果
SELECT @sum 總和


執行結果如下:


通常我們會在 WHILE 迴圈中,使用 @@FETCH_STATUS 判斷是否要繼續從 CURSOR 中,抓資料出來:
USE AdventureWorks
GO

-- 定義變數
DECLARE @Name nvarchar(50)

-- 定義 CURSOR
DECLARE myCursor CURSOR FOR
	SELECT [Name] FROM Sales.Store

-- 開啟 CURSOR
OPEN myCursor

-- 抓出資料
FETCH NEXT FROM myCursor
	INTO @Name

-- 檢查 @@FETCH_STATUS 來決定是否要繼續執行
WHILE (@@FETCH_STATUS = 0)
	BEGIN
		PRINT N'商店名稱:' + @Name
		FETCH NEXT FROM myCursor
			INTO @Name
	END

-- 關閉 CURSOR
CLOSE myCursor

-- 釋放 CURSOR
DEALLOCATE myCursor


執行的部分結果如下:


最後來看一個把 SELECT 的查詢結果作為 WHILE 迴圈的條件,然後再使用 BREAK 與 CONTINUE 來決定是要離開迴圈或是繼續執行迴圈:
USE AdventureWorks
GO

-- 建立一個測試用的資料表
SELECT [Name], ListPrice INTO myTable
	FROM Production.Product

-- 未調價前的平均價格
SELECT 調價前的平均價格 = AVG(ListPrice) FROM myTable

-- 如果平均單價小於 450,則提高 2 倍價格
WHILE (SELECT AVG(ListPrice) FROM myTable) < $450
	BEGIN
		UPDATE myTable
		SET ListPrice = ListPrice * 2

		-- 找出最高的價格
		SELECT 最高的價格 = MAX(ListPrice) FROM myTable

		-- 如果最高價格超過 800,就不再調價
		-- 如果沒有超過 800,還要繼續調價
		IF (SELECT MAX(ListPrice) FROM myTable) > $800
			BREAK
		ELSE
			CONTINUE
	END

SELECT 調價後的平均價格 = AVG(ListPrice) FROM myTable

-- 刪掉測試用的資料表
DROP TABLE myTable


執行結果如下:

參考資料:Microsoft SQL Server 2005 線上叢書

使用流程控制:WHILE、BREAK 與 CONTINUE

目前沒有資料

回應

請填寫您的回應,長度限為1,000個字,回應不計點數,也不限使用次數



 

檢舉違規

違規事項:

*補充檢舉理由(可省略),字數不可超過100字

推薦

推薦理由:


*給回答者的鼓勵(可不填),字數不可超過100字

▼ ADVERTISEMENT ▼

熱門標籤

 cisco   crystal   exchange   it   java   javascript   linux   m-power   mail   microsoft   msnlib   msnp15   msnsdk   msn機器人   mysql   nas   oracle   outlook   pmi   pmp   raid   report   sap   server   smartquery   sql   vista   windows   xp   倍力   倍力資訊   免費軟體   國際專案管理師   報表   專案管理   微軟   有話大聲說   活動   省錢   網路   網路儲存   網路管理   網頁安全   網頁設計   資安   資料庫   資訊安全   防毒軟體   2003   2008