Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O driver ODBC do SQL Server Native Client usa cursores de servidor para implementar a funcionalidade de cursor definida na especificação ODBC. Um aplicativo ODBC controla o comportamento do cursor usando SQLSetStmtAttr para definir atributos de instrução diferentes. Esses são os atributos e seus padrões.
| Atributo | Padrão |
|---|---|
| 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 |
Quando essas opções são definidas como padrões no momento em que uma instrução SQL é executada, o driver ODBC do SQL Server Native Client não usa um cursor de servidor para implementar o conjunto de resultados; em vez disso, ele usa um conjunto de resultados padrão. Se qualquer uma dessas opções for alterada de seus padrões no momento em que uma instrução SQL for executada, o driver ODBC do SQL Server Native Client tentará usar um cursor de servidor para implementar o conjunto de resultados.
Os conjuntos de resultados padrão dão suporte a todas as instruções Transact-SQL. Não há restrições sobre os tipos de instruções SQL que podem ser executadas ao usar um conjunto de resultados padrão.
Os cursores de servidor não dão suporte a todas as instruções Transact-SQL. Os cursores do servidor não dão suporte a nenhuma instrução SQL que gere vários conjuntos de resultados.
Não há suporte para os seguintes tipos de instruções por cursores de servidor:
Lotes
Instruções SQL criadas a partir de duas ou mais instruções SQL SELECT individuais, por exemplo:
SELECT * FROM Authors; SELECT * FROM TitlesProcedimentos armazenados com várias instruções SELECT
Instruções SQL que executam um procedimento armazenado que contém mais de uma instrução SELECT. Isso inclui instruções SELECT que preenchem parâmetros ou variáveis.
Palavras-chave
Instruções SQL que contêm as palavras-chave FOR BROWSE ou INTO.
No SQL Server, se uma instrução SQL que corresponde a qualquer uma dessas condições for executada com um cursor de servidor, o cursor do servidor será convertido implicitamente em um conjunto de resultados padrão. Depois que SQLExecDirect ou SQLExecute retornar SQL_SUCCESS_WITH_INFO, os atributos de cursor serão definidos novamente para suas configurações padrão.
Instruções SQL que não se encaixam nas categorias acima podem ser executadas com qualquer configuração de atributo de instrução; eles funcionam igualmente bem com um conjunto de resultados padrão ou um cursor de servidor.
Erros
No SQL Server 7.0 e posterior, uma tentativa de executar uma instrução que produz vários conjuntos de resultados gera SQL_SUCCESS_WITH INFO e a seguinte mensagem:
SqlState: 01S02"
pfNative: 0
szErrorMsgString: "[Microsoft][SQL Server Native Client][SQL Server]
Cursor type changed."
Os aplicativos ODBC que recebem essa mensagem podem chamar SQLGetStmtAttr para determinar as configurações atuais do cursor.
Uma tentativa de executar um procedimento com várias instruções SELECT ao usar cursores de servidor gera o seguinte erro:
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.
Uma tentativa de executar um lote com várias instruções SELECT ao usar cursores de servidor gera o seguinte erro:
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.
Os aplicativos ODBC que recebem esses erros devem redefinir todos os atributos de instrução de cursor para seus padrões antes de tentar executar a instrução.