Compartilhar via


SQLSetStmtAttr

O driver ODBC do SQL Server Native Client não dá suporte ao modelo de cursor misto (conjunto de chaves/dinâmico). As tentativas de definir o tamanho do conjunto de chaves usando SQL_ATTR_KEYSET_SIZE falharão se o conjunto de valores não for igual a 0.

O aplicativo define SQL_ATTR_ROW_ARRAY_SIZE em todas as instruções para declarar o número de linhas retornadas em uma chamada de função SQLFetchou SQLFetchScroll . Em instruções que indicam um cursor de servidor, o driver usa SQL_ATTR_ROW_ARRAY_SIZE para determinar o tamanho do bloco de linhas que o servidor gera para atender a uma solicitação de busca do cursor. Dentro do tamanho do bloco de um cursor dinâmico, a associação de linha e a ordenação serão corrigidas se o nível de isolamento da transação for suficiente para garantir leituras repetíveis de transações confirmadas. O cursor é completamente dinâmico fora do bloco indicado por esse valor. O tamanho do bloco do cursor do servidor é completamente dinâmico e pode ser alterado a qualquer momento no processamento de busca.

Parâmetros SQLSetStmtAttr e Table-Valued

SQLSetStmtAttr pode ser usado para definir SQL_SOPT_SS_PARAM_FOCUS no APD (descritor de parâmetro de aplicativo) antes de acessar campos de descritor para colunas de parâmetro com valor de tabela.

Se for feita uma tentativa de definir SQL_SOPT_SS_PARAM_FOCUS para o ordinal de um parâmetro que não é um parâmetro com valor de tabela, SQLSetStmtAttr retornará SQL_ERROR e um registro de diagnóstico será criado com SQLSTATE = HY024 e a mensagem "Valor de atributo inválido". SQL_SOPT_SS_PARAM_FOCUS não é alterado quando SQL_ERROR é retornado.

Definir SQL_SOPT_SS_PARAM_FOCUS como 0 restaura o acesso aos registros de descritor para parâmetros.

SQLSetStmtAttr também pode ser usado para definir SQL_SOPT_SS_NAME_SCOPE. Para obter mais informações, consulte a seção SQL_SOPT_SS_NAME_SCOPE, mais adiante neste tópico.

Para obter mais informações, consulte Table-Valued Metadados de parâmetro para instruções preparadas.

Para obter mais informações sobre parâmetros com valor de tabela, consulte ODBC (Parâmetros com valor de tabela).

Suporte a SQLSetStmtAttr para colunas esparsas

SQLSetStmtAttr pode ser usado para definir SQL_SOPT_SS_NAME_SCOPE. Para obter mais informações, consulte a seção SQL_SOPT_SS_NAME_SCOPE, mais adiante neste tópico. Para obter mais informações sobre colunas esparsas, consulte Suporte a Colunas Esparsas (ODBC).

Atributos de instrução

O driver ODBC do SQL Server Native Client também dá suporte aos atributos de instrução específicos do driver a seguir.

SQL_SOPT_SS_CURSOR_OPTIONS

O atributo SQL_SOPT_SS_CURSOR especifica se o driver usará opções de desempenho específicas do driver em cursores. SQLGetData não é permitido quando essas opções são definidas. A configuração padrão é SQL_CO_OFF. O valor ValuePtr é do tipo SQLLEN.

Valor valuePtr Descrição
SQL_CO_OFF Padrão. Desabilita cursores somente avanço rápidos, somente leitura e busca automática, habilita o SQLGetData em cursores somente encaminhamento e somente leitura. Quando SQL_SOPT_SS_CURSOR_OPTIONS é definido como SQL_CO_OFF, o tipo de cursor não será alterado. Ou seja, o cursor somente para avanço rápido continuará sendo um cursor somente para frente. Para alterar o tipo de cursor, o aplicativo agora deve definir um tipo de cursor diferente usando SQLSetStmtAttr/SQL_ATTR_CURSOR_TYPE.
SQL_CO_FFO Habilita cursores somente avanço rápidos, somente leitura, desabilita SQLGetData em cursores somente encaminhamento e somente leitura.
SQL_CO_AF Habilita a opção de busca automática em qualquer tipo de cursor. Quando essa opção é definida para um identificador de instrução, SQLExecute ou SQLExecDirect gerará um SQLFetchScroll implícito (SQL_FIRST). O cursor é aberto e o primeiro lote de linhas é retornado em uma única viagem de ida e volta para o servidor.
SQL_CO_FFO_AF Habilita cursores somente avanço rápidos com a opção de busca automática. É o mesmo que se SQL_CO_AF e SQL_CO_FFO forem especificados.

Quando essas opções são definidas, o servidor fecha o cursor automaticamente quando detecta que a última linha foi buscada. O aplicativo ainda deve chamar SQLFreeStmt (SQL_CLOSE) ou SQLCloseCursor, mas o driver não precisa enviar a notificação de fechamento para o servidor.

Se a lista de seleção contiver uma coluna de texto, ntext ou imagem , o cursor somente para avanço rápido será convertido em um cursor dinâmico e SQLGetData será permitido.

SQL_SOPT_SS_DEFER_PREPARE

O atributo SQL_SOPT_SS_DEFER_PREPARE determina se a instrução é preparada imediatamente ou adiada até que SQLExecute, SQLDescribeCol ou SQLDescribeParam sejam executados. No SQL Server 7.0 e anterior, essa propriedade é ignorada (sem preparação adiada). O valor ValuePtr é do tipo SQLLEN.

Valor valuePtr Descrição
SQL_DP_ON Padrão. Depois de chamar a Função SQLPrepare, a preparação da instrução é adiada até que SQLExecute seja chamado ou a operação de metaproperty (SQLDescribeCol ou SQLDescribeParam) seja executada.
SQL_DP_OFF A instrução é preparada assim que o SQLPrepare é executado.

SQL_SOPT_SS_REGIONALIZE

O atributo SQL_SOPT_SS_REGIONALIZE é usado para determinar a conversão de dados no nível da instrução. O atributo faz com que o driver respeite a configuração de localidade do cliente ao converter valores de data, hora e moeda em cadeias de caracteres. A conversão é somente de tipos de dados nativos do SQL Server para cadeias de caracteres.

O valor ValuePtr é do tipo SQLLEN.

Valor valuePtr Descrição
SQL_RE_OFF Padrão. O driver não converte dados de data, hora e moeda em dados de cadeia de caracteres usando a configuração de localidade do cliente.
SQL_RE_ON O driver usa a configuração de localidade do cliente ao converter dados de data, hora e moeda em dados de cadeia de caracteres.

As configurações de conversão regional se aplicam aos tipos de dados de moeda, numérico, data e hora. A configuração de conversão só é aplicável a conversões de saída quando valores de moeda, numérico, data ou hora são convertidos em cadeias de caracteres.

Observação

Quando a opção de instrução SQL_SOPT_SS_REGIONALIZE estiver ativada, o driver usará as configurações do registro de localidade para o usuário atual. O driver não honrará a localidade do thread atual se o aplicativo o definir, por exemplo, chamando SetThreadLocale.

Alterar o comportamento regional de uma fonte de dados pode causar falha no aplicativo. Um aplicativo que analisa cadeias de caracteres de data e espera que cadeias de caracteres de data apareçam conforme definido pelo ODBC pode ser afetado negativamente alterando esse valor.

SQL_SOPT_SS_TEXTPTR_LOGGING

O atributo SQL_SOPT_SS_TEXTPTR_LOGGING alterna o log de operações em colunas que contêm dados de texto ou imagem . O valor ValuePtr é do tipo SQLLEN.

Valor valuePtr Descrição
SQL_TL_OFF Desabilita o registro em log de operações executadas em dados de texto e imagem .
SQL_TL_ON Padrão. Habilita o registro em log de operações executadas em dados de texto e imagem .

SQL_SOPT_SS_HIDDEN_COLUMNS

O atributo SQL_SOPT_SS_HIDDEN_COLUMNS expõe, no conjunto de resultados, colunas ocultas em uma instrução SELECT FOR BROWSE do SQL Server. O driver não expõe essas colunas por padrão. O valor ValuePtr é do tipo SQLLEN.

Valor valuePtr Descrição
SQL_HC_OFF Padrão. As colunas FOR BROWSE estão ocultas do conjunto de resultados.
SQL_HC_ON Expõe colunas FOR BROWSE.

SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT

O atributo SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT retorna o texto da mensagem para a solicitação de notificação de consulta.

SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS

O atributo SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS especifica as opções usadas para a solicitação de notificação de consulta. Eles são especificados em uma cadeia de caracteres com name=value sintaxe, conforme especificado abaixo. O aplicativo é responsável por criar o serviço e ler as notificações fora da fila.

A sintaxe da cadeia de caracteres das opções de notificação de consulta é:

service=<service-name>[;(local database=<database>|broker instance=<broker instance>)]

Por exemplo:

service=mySSBService;local database=mydb

SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT

O atributo SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT especifica o número de segundos que a notificação de consulta deve permanecer ativa. O valor padrão é 432000 segundos (5 dias). O valor ValuePtr é do tipo SQLLEN.

SQL_SOPT_SS_PARAM_FOCUS

O atributo SQL_SOPT_SS_PARAM_FOCUS especifica o foco para chamadas SQLBindParameter, SQLGetDescField, SQLSetDescField, SQLGetDescRec e SQLSetDescRec.

O tipo para SQL_SOPT_SS_PARAM_FOCUS é SQLULEN.

O padrão é 0, o que significa que essas chamadas abordam parâmetros que correspondem a marcadores de parâmetro na instrução SQL. Quando definidos como o número de parâmetro de um parâmetro com valor de tabela, essas chamadas abordam colunas desse parâmetro com valor de tabela. Quando definido como um valor que não é o número de parâmetro de um parâmetro com valor de tabela, essas chamadas retornam o erro IM020: "O foco do parâmetro não se refere a um parâmetro com valor de tabela".

SQL_SOPT_SS_NAME_SCOPE

O atributo SQL_SOPT_SS_NAME_SCOPE especifica o escopo do nome para chamadas de função de catálogo subsequentes. O conjunto de resultados retornado por SQLColumns depende da configuração de SQL_SOPT_SS_NAME_SCOPE.

O tipo para SQL_SOPT_SS_NAME_SCOPE é SQLULEN.

Valor valuePtr Descrição
SQL_SS_NAME_SCOPE_TABLE Padrão.

Ao usar parâmetros com valor de tabela, indica que os metadados para tabelas reais devem ser retornados.

Ao usar o recurso de colunas esparsas, SQLColumns retornará apenas colunas que não são membros do esparso column_set.
SQL_SS_NAME_SCOPE_TABLE_TYPE Indica que o aplicativo requer metadados para um tipo de tabela, em vez de uma tabela real (as funções de catálogo devem retornar metadados para tipos de tabela). Em seguida, o aplicativo passa o TYPE_NAME do parâmetro com valor de tabela como o parâmetro TableName .
SQL_SS_NAME_SCOPE_EXTENDED Ao usar o recurso de colunas esparsas, SQLColumns retorna todas as colunas, independentemente da column_set associação.
SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET Ao usar o recurso de colunas esparsas, SQLColumns retorna apenas colunas que são membros da esparsa column_set.
SQL_SS_NAME_SCOPE_DEFAULT Igual a SQL_SS_NAME_SCOPE_TABLE.

SS_TYPE_CATALOG_NAME e SS_TYPE_SCHEMA_NAME são usados com os parâmetros CatalogName e SchemaName Quando um aplicativo concluir a recuperação de metadados para parâmetros com valor de tabela, ele deve definir SQL_SOPT_SS_NAME_SCOPE novamente com seu valor padrão SQL_SS_NAME_SCOPE_TABLE.

Quando SQL_SOPT_SS_NAME_SCOPE for definido como SQL_SS_NAME_SCOPE_TABLE, as consultas a servidores vinculados irão falhar. As chamadas para SQLColumns ou SQLPrimaryKeys com um catálogo que contém um componente de servidor falharão.

Se você tentar definir SQL_SOPT_SS_NAME_SCOPE como um valor inválido, SQL_ERROR será retornado e um registro de diagnóstico será gerado com SQLSTATE HY024 e a mensagem "Valor de atributo inválido".

Se uma função de catálogo diferente de SQLTables, SQLColumns ou SQLPrimaryKeys for chamada quando SQL_SOPT_SS_NAME_SCOPE tiver um valor diferente de SQL_SS_NAME_SCOPE_TABLE, SQL_ERROR será retornado. Um registro de diagnóstico é gerado com SQLSTATE HY010 e a mensagem "Erro de sequência de funções (SQL_SOPT_SS_NAME_SCOPE não está definido como SQL_SS_NAME_SCOPE_TABLE)".

Consulte Também

Função SQLGetStmtAttr
Detalhes da implementação da API do ODBC