Konstruowanie instrukcje SQL dla kursory
The SQL Server Native klient ODBC driver uses server cursors to implement the kursor functionality defined in the ODBC specification. Aplikacji ODBC steruje zachowaniem folderu kursor za pomocą SQLzestawStmtAttr do zestaw instrukcja różne atrybuty.Są to atrybuty 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 instrukcję SQL zostanie wykonany, SQL Server Macierzysty sterownik ODBC klient nie jest używany do wykonania zestaw wyników kursor serwera; zamiast tego używa domyślnego zestaw wyników. Jeśli dowolne z tych opcji są zmieniane z ich ustawienia domyślne w czasie wykonywania instrukcja języka SQL SQL Server Macierzysty sterownik ODBC klient próbuje wdrożyć zestaw wyników za pomocą kursor serwera.
Domyślne zestawy wyników obsługuje wszystkie Transact-SQL instrukcje. Nie ma żadnych ograniczeń dotyczących typów instrukcji SQL, które mogą być wykonywane podczas korzystania z domyślny zestaw wyników.
Serwer kursory nie są obsługiwane wszystkie Transact-SQL instrukcje. Kursory serwer nie obsługuje żadnych instrukcja języka SQL, która generuje wiele zestawów wyników.
Następujące typy instrukcji nie są obsługiwane przez serwer kursorów:
Partie
Instrukcje SQL składa się z dwóch lub więcej pojedynczych SELECT instrukcji, na przykład:
SELECT * FROM Authors; SELECT * FROM Titles
Procedury przechowywane z wielu instrukcji SELECT
instrukcja SQL, których wykonać procedura przechowywana zawierającej więcej niż jedną instrukcję SELECT.Dotyczy to także instrukcji SELECT, wprowadź parametry i zmienne.
Słowa kluczowe
Instrukcje SQL zawierających słowa kluczowe COMPUTE COMPUTE BY FOR BROWSE i INTO.
W SQL Server, jeśli instrukcję SQL, która pasuje do żadnego z tych warunków zostanie wykonany z kursor serwera, kursor serwera jest niejawnie konwertowane na domyślny zestaw wyników. Po SQLExecDirect or SQLExecute zwraca SQL_SUCCESS_WITH_INFO, atrybuty kursor zostanie ustawiony ponownie do ustawień domyślnych.
Instrukcje SQL, które nie mieszczą się w powyższych kategoriach mogą być wykonywane z wszystkich ustawień atrybut instrukcja, działają równie dobrze z domyślnego zestaw wyników lub kursor serwera.
Błędy
W SQL Server 7.0 lub nowszej, próba wykonać instrukcja, która generuje wiele zestawów wyników generuje informacje SQL_SUCCESS_WITH i następujący komunikat:
SqlState: 01S02"
pfNative: 0
szErrorMsgString: "[Microsoft][SQL Server Native Client][SQL Server]
Cursor type changed."
Aplikacje ODBC odbierania tej wiadomości, mogą wywoływać SQLGetStmtAttr , aby określić bieżące ustawienia kursor.
Podjęto próbę wykonać procedury z wielu instrukcji SELECT, podczas korzystania z 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.
Podjęto próbę wykonać wsadowego z wielu instrukcji SELECT podczas korzystania z 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.
Podjęto próbę wykonać instrukcja SELECT zawierająca klauzulę COMPUTE podczas korzystania z kursorów serwer generuje następujący komunikat o błędzie:
SqlState: 42000
pfNative: 16907
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]
'COMPUTE' is not allowed in cursor statements.
Odbierania tych błędów aplikacji ODBC musi zresetować wszystkie atrybuty instrukcja kursor na domyślne przed przystąpieniem do wykonywania instrukcja.