SQL Cursors
С точки зрения базы данных, набор записей возвращаемый SELECT (или подготовленный для UPDATE) называется курсором. В языке SQL есть несколько специализированных операций, предназначенных исключительно для работы с курсорами:
Курсоры эти бывают нескольких видов:
Курсоры могут быть или предусмотренные SQL-92:
или другие (несовместимые), определенные TSQL:
Как вы видите - в стандартном SQL - курсоры бывают скролируемые (для всех курсорных операций) или простые - только для операции FORWARD ONLY. С другой стороны курсоры бывают (1) простые (чуствительные) - если кто-то другой по ходу дела изменил одну из записей в базе, представленную у вас в курсоре - то в вашем курсоре эта запись изменится тоже. (2) курсоры INSENSITIVE (т.е. нечуствительные) с предварительным копированием курсора в TempDB. Тогда вы уверены, что по ходу ваших действий никто не меняет и не удаляет кроме вас записи в вашем курсоре.
В TSQL опция FORWARD ONLY/SCROLL означает то же. В выборе STATIC/KEYSET/DYNAMIC/FAST_FORWARD - STATIC означает такой же нечуствительный курсор, как и SQL-92. DYNAMIC - противоположное. KEYSET - хитрый курсор, означающий что изменения, вномимые другими пользователями, в вашем курсоре отражаются только такие, которые не меняют порядок записей в нем при их последовательном переборе у вас. FAST_FORWARD - означает FORWARD_ONLY + READ ONLY - Это единственный тип курсора, применяемый а ADO .NET.
Теперь посмотрим, какими становятся курсоры на уровне ADO. Как видите CursorType в точности соответсвует TSQL:
Кроме того, библиотеки ADO добавили свою функциональность - расположение курсора в непосредственном и постоянном контакте с базой на сервере либо на клиентском компьютере в виде отсоединенного от базы набора данных (именно так расположены курсоры в ADO .NET).
|