-- 1. 宣告游標
DECLARE MyCursor CURSOR FOR
SELECT TOP 5 FBookName, FBookCoding FROM TBookInfo;
-- 2. 開啟游標
OPEN MyCursor;
-- 3. 宣告接收變數
DECLARE @BookName NVARCHAR(2000), @BookCoding NVARCHAR(2000);
-- 4. 取第一筆
FETCH NEXT FROM MyCursor INTO @BookName, @BookCoding;
-- 5. 迴圈處理
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'name: ' + @BookName;
FETCH NEXT FROM MyCursor INTO @BookName, @BookCoding;
END
-- 6. 關閉與釋放
CLOSE MyCursor;
DEALLOCATE MyCursor;
CREATE TABLE #a (id VARCHAR(20), name VARCHAR(20));
INSERT INTO #a VALUES ('1','jack'), ('2','join'), ('3','make');
DECLARE mycursor CURSOR FOR SELECT * FROM #a;
OPEN mycursor;
DECLARE @id VARCHAR(20), @name VARCHAR(20);
FETCH NEXT FROM mycursor INTO @id, @name;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @id, @name;
FETCH NEXT FROM mycursor INTO @id, @name;
END
CLOSE mycursor;
DEALLOCATE mycursor;
游標屬逐列操作(RBAR),資源消耗極大。SQL 引擎優化對象是集合,能用集合操作(JOIN/WHERE/窗口函數)絕不使用游標。大量資料下游標是效能殺手。