Introduction
A cursor lets you go through rows in a table one by one. It helps when you want to do something with each row separately.
DECLARE cursor_name CURSOR FOR select_statement; OPEN cursor_name; FETCH NEXT FROM cursor_name INTO variable_list; -- Repeat FETCH as needed CLOSE cursor_name; DEALLOCATE cursor_name;
DECLARE emp_cursor CURSOR FOR SELECT employee_id, name FROM employees;
OPEN emp_cursor; FETCH NEXT FROM emp_cursor INTO @emp_id, @emp_name;
WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'Employee: ' + @emp_name; FETCH NEXT FROM emp_cursor INTO @emp_id, @emp_name; END
CLOSE emp_cursor; DEALLOCATE emp_cursor;
DECLARE @emp_id INT, @emp_name NVARCHAR(50); DECLARE emp_cursor CURSOR FOR SELECT employee_id, name FROM employees; OPEN emp_cursor; FETCH NEXT FROM emp_cursor INTO @emp_id, @emp_name; WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'Employee ID: ' + CAST(@emp_id AS NVARCHAR(10)) + ', Name: ' + @emp_name; FETCH NEXT FROM emp_cursor INTO @emp_id, @emp_name; END CLOSE emp_cursor; DEALLOCATE emp_cursor;
CURSOR in SQL?DECLARE @Name VARCHAR(50); DECLARE name_cursor CURSOR FOR SELECT Name FROM Employees WHERE Department = 'Sales'; OPEN name_cursor; FETCH NEXT FROM name_cursor INTO @Name; WHILE @@FETCH_STATUS = 0 BEGIN PRINT @Name; FETCH NEXT FROM name_cursor INTO @Name; END CLOSE name_cursor; DEALLOCATE name_cursor;
DECLARE cur CURSOR FOR SELECT Id FROM Products; OPEN cur; FETCH NEXT FROM cur INTO @ProductId; WHILE @@FETCH_STATUS = 0 BEGIN PRINT @ProductId; END CLOSE cur; DEALLOCATE cur;
Pass the test and this pattern moves unknown