Tworząc instrukcje SQL dla kursory
SQL Server Sterownik ODBC macierzystym klienta używa kursory serwera, aby zaimplementować funkcję kursor zdefiniowane w specyfikacji ODBC.Aplikacji ODBC kontroluje zachowanie kursor za pomocą SQLzestawStmtAttr do zestaw atrybuty różnych instrukcja.Są to atrybutów i ich ustawienia domyślne.
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 |
Kiedy te opcje są ustawione wartości domyślne w czas jest wykonywana instrukcja SQL, SQL Server sterownik ODBC macierzystym klienta nie używać kursor serwera do zaimplementowania zestaw wyników; Zamiast tego używa domyślny zestaw wyników.Jeśli te opcje nie zostaną zmienione wartości domyślne w czas jest wykonywana instrukcja SQL, SQL Server sterownik ODBC macierzysty klient próbuje użyć kursor serwera do zaimplementowania zestaw wyników.
Zestawy wyników domyślne obsługują wszystkie Transact-SQL instrukcji.Nie ma żadnych ograniczeń na typy instrukcji SQL, które mogą być wykonywane przy użyciu domyślny zestaw wyników.
Kursory serwera nie obsługują wszystkie Transact-SQL instrukcji.Kursory serwer nie obsługuje żadnych instrukcja języka SQL, która generuje wiele zestawów wyników.
Następujące typy sprawozdań nie są obsługiwane przez serwer kursory:
Partie
Instrukcje SQL składa się z dwóch lub więcej pojedynczych instrukcji SQL SELECT, na przykład:
SELECT * FROM Authors; SELECT * FROM Titles
Procedury przechowywane z wielu instrukcji SELECT
instrukcja SQL, których wykonać procedura składowana zawierającej więcej niż jedną instrukcję SELECT.Zawiera instrukcje SELECT, które wypełnienia parametrów lub zmienne.
Słowa kluczowe
Instrukcje SQL zawierających słowa kluczowe OBLICZYĆ COMPUTE BY, aby PRZEGLĄDAĆ lub INTO.
W SQL Server, jeśli instrukcja języka SQL, które dopasowuje dowolny z tych warunków jest wykonywane z kursorem serwera, kursor serwera są niejawnie konwertowane na domyślny zestaw wyników.Po SQLExecDirect lub SQLExecute zwraca wartość SQL_SUCCESS_WITH_INFO, kursor będzie atrybutów zestaw do ich domyślnych zestawtings.
instrukcja SQL, których nie dopasowanie powyższych kategorii mogą być wykonywane przez wszystkie ustawienia atrybut instrukcja; działają równie dobrze z domyślny zestaw wyników lub kursor serwera.
Błędy
W SQL Server 7.0 i nowszymi próba wykonać instrukcja, która generuje wiele zestawów wyników generuje informacje O SQL_SUCCESS_WITH i następujący komunikat:
SqlState: 01S02"
pfNative: 0
szErrorMsgString: "[Microsoft][SQL Server Native Client][SQL Server]
Cursor type changed."
Ten komunikat aplikacji ODBC może wywołać SQLGetStmtAttr do określenia bieżące ustawienia kursor.
Próba wykonać procedury z wielu instrukcji SELECT podczas używania kursorów serwer generuje następujący komunikat o błędzie:
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 wykonać partia z wielu instrukcji SELECT podczas używania kursorów serwer generuje następujący komunikat o błędzie:
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.
Próba wykonać instrukcja SELECT zawierającej obliczeń klauzula po użyciu kursory serwera generuje następujący błąd:
SqlState: 42000
pfNative: 16907
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]
'COMPUTE' is not allowed in cursor statements.
Przed próbą wykonać instrukcja odbierania tych błędów aplikacji ODBC należy zresetować wszystkie atrybuty instrukcja kursor domyślne.