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).



Comments ( )
<00>  <01>  <02>  <03>  <04>  <05>  <06>  <07>  <08>  <09>  <10>  <11>  <12>  <13>  <14>  <15>  <16>  <17>  <18>  <19>  <20>  <21>  <22>  <23
Link to this page: //www.vb-net.com/sql/cursor/index.htm
<SITEMAP>  <MVC>  <ASP>  <NET>  <DATA>  <KIOSK>  <FLEX>  <SQL>  <NOTES>  <LINUX>  <MONO>  <FREEWARE>  <DOCS>  <ENG>  <CHAT ME>  <ABOUT ME>  < THANKS ME>