Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Sterownik ODBC dla natywnego klienta SQL Server wykorzystuje kursory serwera do implementacji funkcjonalności kursora zdefiniowanej w specyfikacji ODBC. Aplikacja ODBC kontroluje zachowanie kursora, wykorzystując SQLSetStmtAttr do ustawiania różnych atrybutów instrukcji. To są atrybuty i ich domyślne ustawienia.
| Attribute | Default |
|---|---|
| SQL_ATTR_CONCURRENCY | SQL_CONCUR_READ_ONLY |
| SQL_ATTR_CURSOR_TYPE | SQL_CURSOR_FORWARD_ONLY |
| SQL_ATTR_CURSOR_SCROLLABLE | SQL_NONSCROLLABLE |
| SQL_ATTR_CURSOR_SENSITIVITY | SQL_UNSPECIFIED |
| SQL_ATTR_ROW_ARRAY_SIZE | 1 |
Gdy te opcje są ustawione na domyślne wartości w momencie wykonania instrukcji SQL, sterownik ODBC natywnego klienta SQL Server nie używa kursora serwera do implementacji zbioru wyników; zamiast tego używa domyślnego zestawu wyników. Jeśli któraś z tych opcji zostanie zmieniona względem domyślnego w momencie wykonania instrukcji SQL, sterownik ODBC dla natywnego klienta SQL Server próbuje użyć kursora serwera do implementacji zestawu wyników.
Domyślne zbiory wyników obsługują wszystkie Transact-SQL stwierdzenia. Nie ma ograniczeń dotyczących typów instrukcji SQL, które mogą być wykonywane przy użyciu domyślnego zbioru wyników.
Kursory serwera nie obsługują wszystkich Transact-SQL instrukcji. Kursory serwera nie obsługują żadnych instrukcji SQL generujących wiele zbiorów wyników.
Następujące typy instrukcji nie są obsługiwane przez kursory serwera:
Partie produkcyjne
Instrukcje SQL zbudowane na podstawie dwóch lub więcej indywidualnych instrukcji SQL SELECT, na przykład:
SELECT * FROM Authors; SELECT * FROM TitlesProcedury przechowywane z wieloma instrukcjami SELECT
Instrukcje SQL wykonujące procedurę przechowywaną zawierającą więcej niż jedną instrukcję SELECT. Dotyczy to także instrukcji SELECT wypełniających parametry lub zmienne.
Słowa kluczowe
Instrukcje SQL zawierające słowa kluczowe FOR BROWSE, czyli INTO.
W SQL Server, jeśli instrukcja SQL spełniająca którykolwiek z tych warunków zostanie wykonana kursorem serwera, kursor serwera jest niejawnie konwertowany na domyślny zbiór wyników. Po zwróceniu SQL_SUCCESS_WITH_INFO przez SQLExecDirect lub SQLExecute , atrybuty kursora zostaną przywrócone do domyślnych ustawień.
Instrukcje SQL, które nie pasują do powyższych kategorii, mogą być wykonywane z dowolnymi ustawieniami atrybutów instrukcji; Działają równie dobrze zarówno z domyślnym zestawem wyników, jak i kursorem serwera.
Errors
W SQL Server 7.0 i późniejszych próba wykonania instrukcji generującej wiele zestawów wyników generuje SQL_SUCCESS_WITH INFO oraz następujący komunikat:
SqlState: 01S02"
pfNative: 0
szErrorMsgString: "[Microsoft][SQL Server Native Client][SQL Server]
Cursor type changed."
Aplikacje ODBC otrzymujące ten komunikat mogą wywołać SQLGetStmtAttr , aby określić aktualne ustawienia kursora.
Próba wykonania procedury z wieloma instrukcjami SELECT przy użyciu kursorów serwera generuje następujący błąd:
SqlState: 42000
pfNative: 16937
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]
A server cursor is not allowed on a stored procedure
with more than one SELECT statement in it. Use a
default result set or client cursor.
Próba wykonania partii z wieloma instrukcjami SELECT przy użyciu kursorów serwera generuje następujący błąd:
SqlState: 42000
pfNative: 16938
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]
sp_cursoropen. The statement parameter can only
be a single SELECT statement or a single stored
procedure.
Aplikacje ODBC otrzymujące te błędy muszą zresetować wszystkie atrybuty instrukcji kursora do ich domyślnych wartości przed próbą wykonania instrukcji.