Udostępnij za pośrednictwem


API Server Cursors

OLE DB, ODBC i interfejsów API ADO obsługują kursory mapowania przez zestawy wyników wykonanych instrukcji SQL.The Microsoft SQL Server Native Client OLE DB provider and SQL Server Native Client ODBC driver implement these operations through the use of API server cursors.Kursory serwera interfejsu API są kursory wykonywane na serwerze, zarządzane przez interfejs API funkcje kursor.Jak aplikacja wywołania funkcji API kursor, operacji kursor jest przesyłany do serwera przez sterownik ODBC lub dostawca OLE DB.

Podczas korzystania z kursor serwera interfejsu API OLE DB, ODBC i obiektów ADO, za pomocą funkcji lub metody interfejsu API:

  1. Otwórz połączenie.

  2. Ustawianie atrybutów lub właściwości określające parametry kursor w interfejsie API automatycznie mapuje nad każdym zestaw wyników.

  3. wykonać jeden lub więcej Transact-SQL instrukcje.

  4. Za pomocą funkcji interfejsu API lub metody do pobierania wierszy w zestawach wyników.

Gdy interfejs API kursor atrybutów i właściwości są zestaw do ich domyślnych zestaw tings SQL Server Macierzystego dostawca klient OLE DB oraz SQL Server Macierzysty sterownik ODBC klient za pomocą domyślnego wynik zestaw s. Mimo że interfejs API technicznie jest proszony o podanie kursor, domyślne ustawienia kursora odpowiada zachowanie domyślny zestaw wyników.dostawca OLE DB i sterownika ODBC, więc implementować domyślne opcje kursor za pomocą zestaw, ponieważ jest on najbardziej efektywny sposób, aby wiersze pobrać z serwera wyników domyślny.W przypadku korzystania z domyślnych zestawów wyników, aplikacji może być wykonywany dowolny Transact-SQL Instrukcja lub partia, ale może mieć jedną instrukcję zaległe tylko dla połączenia. Oznacza to, że aplikacja musi procesu lub anulować wszystkie zestawy wyników zwróconych przez jedną instrukcję, zanim można go wykonać instrukcję innego połączenia.

Gdy interfejs API kursor atrybutów i właściwości są zestaw na inną wartość niż domyślne, SQL Server Macierzystego dostawca klient OLE DB oraz SQL Server Macierzysty sterownik ODBC klient za pomocą interfejsu API serwera kursory zamiast domyślnego wynik zestaw s. Każde wywołanie funkcja API, które pobiera wiersze generuje roundtrip do serwera w celu pobrania wierszy z kursor serwera interfejsu API.

kursor serwera interfejsu API Ograniczenia

Podczas korzystania z interfejsu API serwera kursory, aplikacji nie można wykonać następujące instrukcje:

  • Transact-SQL instrukcje, SQL Server nie jest obsługiwana w serwerze kursorów.

  • Instancje lub procedur przechowywanych, które zwracają kilka zestawów wyników.

  • Instrukcji SELECT, zawierające klauzule COMPUTE, COMPUTE BY, FOR BROWSE lub INTO.

  • Instrukcja wykonać odwoływania się do zdalnego procedura przechowywana.

Wdrożenie kursorów Server interfejsu API

The SQL Server Native klient OLE DB dostawca and SQL Server Native klient ODBC driver use these special procedury składowane w systemie to signal kursor operations to the server:

  • sp_cursoropen definiuje instrukcja języka SQL ma być skojarzony z kursorem i opcje kursora, a następnie wypełni się kursor.

  • sp_cursorfetch pobiera wiersz lub blok wierszy z kursor.

  • sp_cursorclose zamyka i zwalnia się kursor.

  • sp_cursoroption służy do ustawiania różnych opcji kursor.

  • sp_cursor jest używana do żądania pozycjonowanego aktualizacji.

  • sp_cursorprepare kompiluje Transact-SQL instrukcja lub partia skojarzonych z kursor do planu wykonania, ale nie tworzy się kursor.

  • sp_cursorexecute tworzy i wypełnia kursor z plan wykonania, utworzony przez sp_cursorprepare.

  • sp_cursorunprepare odrzuca plan wykonania od sp_cursorprepare.

  • sp_cursorprepexec compiles a plan for the submitted Transact-SQL statement or batch associated with a cursor, creates the cursor, and populates it.sp_cursorprepexec combines the behavior of sp_cursorprepare and sp_cursorexecute.

Procedury te przechowywana w systemie będą widoczne w programu SQL Server Profiler ślady ADO i OLE DB ODBC aplikacje korzystające z interfejsu API serwera kursorów.Są one przeznaczone tylko do użytku wewnętrznego SQL Server Macierzystego dostawca klient OLE DB oraz SQL Server Macierzysty sterownik ODBC klient. Wszystkie funkcje tych procedur jest dostępne dla aplikacji, korzystając z funkcji kursor interfejsów API bazy danych.Określanie procedur bezpośrednio w aplikacji nie jest obsługiwana.

Kiedy SQL Server wykonuje instrukcja dla połączenia, nie innych instrukcja mogą być wykonywane w odniesieniu do połączenia, dopóki nie zostały przetworzone wszystkich wyniki dla pierwszej instrukcja lub anulowane. Ta reguła ma nadal podczas korzystania z interfejsu API serwera kursory, ale do aplikacji wygląda jak SQL Server Rozpoczęto obsługi wielu aktywnych instrukcje dla połączenia. This is because the full result set is stored in the server cursor and the only statements being transmitted to SQL Server are the executions of the sp_cursor system stored procedures.SQL Server executes the stored procedure, and as soon as the client retrieves the result set it can execute any other statement.Dostawca OLE DB i sterownika ODBC zawsze pobierać wszystkie wyniki z sp_cursor procedura przechowywana, przed ich zwrócić sterowanie do aplikacji.Dzięki temu aplikacje przeplot pobiera przeciwko wielu kursory aktywnego serwera.

W poniższej tabela pokazano, jak aplikacja może przetwarzać dwa kursorów w tym samym czas na połączenie za pomocą dwóch dojścia instrukcja.

Instrukcja dojściu 1

Instrukcja dojściu 2

zestaw kursor atrybutów w taki sposób, że kursor serwera interfejsu API będą używane.

 

SQLExecDirect instrukcja języka SQL.Wywołania sterownika ODBC sp_cursoropen i pobiera zestaw wyników zwróconej przez procedurę.

 

 

zestaw kursor atrybutów w taki sposób, że kursor serwera interfejsu API będą używane.

 

SQLExecDirect instrukcja języka SQL.Wywołania sterownika ODBC sp_cursoropen i pobiera zestaw wyników zwróconej przez procedurę.

SQLFetchScroll pobrać pierwszy blok wierszy.Wywołania sterownika sp_cursorfetch , a następnie pobiera zestaw wyników zwróconej przez procedurę.

 

 

SQLFetchScroll pobrać pierwszy blok wierszy.Wywołania sterownika sp_cursorfetch , a następnie pobiera zestaw wyników zwróconej przez procedurę.

SQLFetchScroll , aby pobrać inny blok wierszy.Wywołania sterownika sp_cursorfetch , a następnie pobiera zestaw wyników zwróconej przez procedurę.

 

 

SQLFetchScroll , aby pobrać inny blok wierszy.Wywołania sterownika sp_cursorfetch , a następnie pobiera zestaw wyników zwróconej przez procedurę.

Wywołanie SQLFreeStmt or SQLCloseCursor.Wywołania sterownika sp_cursorclose.

 

 

Wywołanie SQLFreeStmt or SQLCloseCursor.Wywołania sterownika sp_cursorclose.

Ponieważ żadne wyniki nie są pozostawiane zaległe połączenia po dowolnej wywołanie sp_cursor przechowywanej procedury, można wykonywać wiele Transact-SQL instrukcje jednocześnie na jedno połączenie, pod warunkiem, że wszystkie wykonać są z interfejsu API serwera kursorów.

Określanie serwera interfejsu API kursory

Poniżej przedstawiono podsumowanie użycia interfejsu API serwera kursorów w interfejsów API:

  • OLE DB

    • Otwórz obiekt sesja, otwórz obiekt polecenia i określić tekst polecenia.

    • Ustaw właściwości zestaw wierszy, takie jak DBPROP_OTHERINSERT, DBPROP_OTHERUPDATEDELETE, DBPROP_OWNINSERT DBPROP_OWNUDPATEDELETE zachowania kursor formantu.

    • wykonać polecenia obiektu.

    • Pobieranie wierszy zestaw, przy użyciu metody takie jak IRowset::GetNextRows, IRowsetLocate::GetRowsAt, IRowsetLocate::GetRowsAtBookmark i IRowsetScroll::GetRowsAtRatio wyników.

  • ODBC

    • Otwórz okno połączenia i wywołanie Procedura SQLAllocHandle przydzielić dojścia instrukcja.

    • Wywołanie SQLSetStmtAttr , aby ustawić atrybuty SQL_ATTR_CURSOR_TYPE SQL_ATTR_CONCURRENCY i SQL_ATTR_ROW_ARRAY_SIZE.Alternatywnie można określić zachowania kursor przez ustawienie atrybutów SQL_ATTR_CURSOR_SCROLLABLE i SQL_ATTR_CURSOR_SENSITIVITY.

    • wykonać Transact-SQL za pomocą instrukcja SQLExecDirect or SQLPrepare and SQLExecute.

    • Pobieranie wierszy lub wiersze, używając bloków SQLFetch or SQLFetchScroll.

  • ADO

    • Zdefiniowanie obiektu połączenia i obiektu Recordset, a następnie wykonać metoda Open na obiekt połączenia.

    • wykonać metoda Open dotyczące określania obiektu zestaw rekordów CursorType i/lub LockType parametr.

    • Pobieranie wierszy przy użyciu metod przenoszenia, MoveFirst, MoveLast, MoveNext i MovePrevious zestawu rekordów.

Kursory interfejsu API serwera i opcje zestaw

W SQL Server, jeśli instrukcja pobrania zostało wydane i w przypadku zmiany do dowolnego z następujących opcji mających wpływ na plan lub opcje wymagane do widoków indeksowanych lub obliczane kolumny, kursor używa migawkę wartości opcji obowiązują w momencie kursor jest otwarty. Wartości te są używane dla wszystkich operacji pobierania kolejne, a zmiany w bieżącym kontekście są ignorowane.

Opcje mające wpływ na plan

ARITHABORT

NUMERIC_ROUNDABORT

FORCEPLAN

QUOTED_IDENTIFIER

ANSI_NULL_DFLT_ON

ANSI_WARNINGS

ANSI_PADDING

ANSI_NULLS

CONCAT_NULL_YIELDS_NULL

DATEFIRST

DATEFORMAT

JĘZYK

TEXTSIZE

Widoki indeksowane i kolumn obliczanych

ANSI_NULLS

ANSI_PADDING

ANSI_WARNINGS

CONCAT_NULL_YIELDS_NULL ARITHABORT (w obszarze zgodności 80 lub niższym)

QUOTED_IDENTIFIER

NUMERIC_ROUNDABORT