sql 游標(biāo)是一種逐行訪問結(jié)果集的機(jī)制,類似指針,指向當(dāng)前行。優(yōu)勢在于內(nèi)存消耗低和多次回訪能力,但相對復(fù)雜,在 sql server 僅限于存儲過程或 t-sql 批處理。
SQL 游標(biāo)簡介
SQL 游標(biāo)是一種允許程序逐行訪問結(jié)果集的機(jī)制。它類似于指針,指向結(jié)果集中的當(dāng)前行。
實例
創(chuàng)建游標(biāo)
DECLARE cursor_name CURSOR FOR SELECT * FROM table_name;
登錄后復(fù)制
打開游標(biāo)
OPEN cursor_name;
登錄后復(fù)制
獲取當(dāng)前行
FETCH NEXT FROM cursor_name INTO variable1, variable2, ...;
登錄后復(fù)制
使用當(dāng)前行的值
-- cursor_name print variable1 print variable2
登錄后復(fù)制
移動游標(biāo)
FETCH NEXT:前進(jìn)到下一行。
FETCH PREVIOUS:后退到上一行。
FETCH FIRST:移動到第一行。
FETCH LAST:移動到最后一行。
關(guān)閉游標(biāo)
CLOSE cursor_name;
登錄后復(fù)制
實例
DECLARE employee_cursor CURSOR FOR SELECT employee_id, first_name, last_name FROM employees; OPEN employee_cursor; FETCH NEXT FROM employee_cursor INTO e_id, f_name, l_name; -- 打印當(dāng)前行值 PRINT e_id, f_name, l_name; -- 移動到下一行 FETCH NEXT FROM employee_cursor INTO e_id, f_name, l_name; -- 打印當(dāng)前行值 PRINT e_id, f_name, l_name; CLOSE employee_cursor;
登錄后復(fù)制
優(yōu)點
逐行處理結(jié)果集,減少內(nèi)存消耗。
允許對結(jié)果集進(jìn)行多次回訪問。
提高性能,尤其是在處理大型結(jié)果集時。
缺點
比其他方法更復(fù)雜。
在 SQL Server 中,只能在 stored procedures或 T-SQL 批處理中使用。






