Я вижу этот пример в документации Microsoft
USE AdventureWorks2012;
GO
DECLARE contact_cursor CURSOR FOR
SELECT LastName FROM Person.Person
WHERE LastName LIKE 'B%'
ORDER BY LastName;
OPEN contact_cursor;
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor;
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- **This is executed as long as the previous fetch succeeds.**
FETCH NEXT FROM contact_cursor;
END
CLOSE contact_cursor;
DEALLOCATE contact_cursor;
GO
Мне интересно и спрашиваю
а) что происходит внутри цикла FETCH-WHILE? Кажется, он ничего не делает, кроме пропуска комментария. Можно ли что-то сделать с данными, не используя 'INTO'
?
б) как получить доступ к данным столбца из текущей строки, внутри цикла, в T-SQL? Желательно просто contact_cursor.LastName
.
Да, я читал, что должен работать «на основе множеств», а курсоры не эффективны. Но мне разрешено выполнять обработку (строковые манипулы, тестировать их и, в конце концов, одно ОБНОВЛЕНИЕ на строку) в T-SQL, а не во внешней процедурной среде, и делать это осторожно и надежно, и это всего лишь пара записей, один раз + тестирование. И я совершенно новый для T-SQL, но старый для SQL и многих других. T-SQL - это 2016 год, когда он имеет значение.
Плз Я не могу отвечать как комментарии, потому что мой уровень слишком низкий. Я благодарен за помощь, за объяснение этого. Спасибо!