以 SQL Server 2000 Northwind 資料庫的 Customers 資料表為例,使用 暫存表 搭配 While 迴圈 遍歷 CompanyName 欄位。
CREATE TABLE #temp
(
id INT IDENTITY(1,1),
customer NVARCHAR(50)
)
DECLARE @customer NVARCHAR(50)
DECLARE @n INT
DECLARE @rows INT
SELECT @n = 1
INSERT #temp (customer)
SELECT DISTINCT CompanyName FROM Customers
SELECT @rows = @@ROWCOUNT
WHILE @n <= @rows
BEGIN
SELECT @customer = CompanyName
FROM Customers
WHERE CompanyName = (SELECT customer FROM #temp WHERE id = @n)
ORDER BY CompanyName DESC
PRINT @customer
SELECT @n = @n + 1
END
DROP TABLE #temp
Alfreds Futterkiste Ana Trujillo Emparedados y helados Antonio Moreno Taquería Around the Horn Berglunds snabbköp Blauer See Delikatessen Blondesddsl père et fils Bólido Comidas preparadas Bon app' Bottom-Dollar Markets B's Beverages Cactus Comidas para llevar Centro comercial Moctezuma Chop-suey Chinese Comércio Mineiro Consolidated Holdings DIE Wandernde Kuh Drachenblut Delikatessen Du monde entier Eastern Connection ... (共 91 筆記錄)
| 特性 | 暫存表法 | 游標法 |
|---|---|---|
| 資源佔用 | 需建立實體暫存表 | 記憶體中維護游標結構 |
| 程式碼複雜度 | 需手動管理計數器 | 語法較標準化 |
| 效能 | 大量資料時較慢 | 通常較暫存表法佳 |
| 適用場景 | 需複雜中間運算、多次引用 | 單純逐筆處理 |
現代 SQL Server 開發建議優先使用 集合式操作(如 SELECT、JOIN、APPLY、窗格函數)替代逐筆迴圈,效能與可維護性較佳。僅在必須逐筆執行程序邏輯(如呼叫外部 API、發送郵件)時考慮迴圈方案。