Opções SET que afetam os resultados

Exibições indexadas e índices em colunas computadas armazenam resultados no banco de dados para referência futura. Os resultados armazenados serão válidos apenas se todas as conexões que fazem referência à exibição indexada ou coluna computada indexada puderem gerar o mesmo conjunto de resultados que a conexão que criou o índice. Para ter certeza de que os resultados armazenados podem ser mantidos corretamente e retornam resultados consistentes, as opções SET na seguinte tabela deverão ser definidas como os valores mostrados na coluna Valor necessário sempre que ocorrerem estas condições:

  • É criado um índice em uma exibição ou coluna computada.

  • Uma coluna computada está definida e PERSISTED está especificado.

  • Uma operação INSERT, UPDATE ou DELETE modifica valores de dados armazenados na exibição indexada ou coluna computada indexada. Isso inclui operações como BCP, DTS, replicação e consultas distribuídas.

  • O otimizador de consultas usa o índice no plano de execução de consulta.

  • Para exibições indexadas, as opções ANSI_NULLS e QUOTED_IDENTIFIER devem ser definidas como ON quando a exibição é criada, porque essas duas configurações são armazenadas com os metadados da exibição.

    Opções SET

    Valor necessário

    Valor do servidor padrão

    Padrão

    Valor de OLE DB e ODBC

    Padrão

    Valor da DB-Library

    ANSI_NULLS

    ON

    OFF

    ON

    OFF

    ANSI_PADDING

    ON

    ON

    ON

    OFF

    ANSI_WARNINGS*

    ON

    OFF

    ON

    OFF

    ARITHABORT

    ON

    ON

    OFF

    OFF

    CONCAT_NULL_YIELDS_NULL

    ON

    OFF

    ON

    OFF

    NUMERIC_ROUNDABORT

    OFF

    OFF

    OFF

    OFF

    QUOTED_IDENTIFIER

    ON

    OFF

    ON

    OFF

    *A definição de ANSI_WARNINGS como ON definirá ARITHABORT implicitamente como ON quando o nível de compatibilidade do banco de dados estiver definido como 90 ou mais. Se o nível de compatibilidade do banco de dados estiver definido como 80 ou menos, a opção ARITHABORT deverá ser definida explicitamente como ON.

Quando as opções SET estiverem definidas incorretamente, podem ocorrer uma ou mais das seguintes situações:

  • O Mecanismo de Banco de Dados gera um erro e reverte qualquer instrução INSERT, UPDATE ou DELETE que altere valores de dados armazenados no índice.

  • O otimizador de consultas não considera o índice no plano de execução de qualquer instrução Transact-SQL.

  • A exibição indexada ou coluna computada não pode ser criada.

Configurações de opções SET para conexões OLE DB e ODBC.

A maioria dos aplicativos usa o Provedor OLE DB para o SQL Server ou o driver ODBC SQL Server para conectar a uma instância do SQL Server, incluindo SQL Server Management Studio, Integration Services, replicação e operações de cópia em massa. As configurações padrão de OLE DB e ODBC estão corretas para as seis opções SET que são necessárias para índices em exibições ou colunas computadas. Para obter os valores padrão de OLE DB e ODBC, consulte a tabela anterior. Essas configurações impõem as regras do padrão ISO e são as configurações recomendadas para o SQL Server. Para obter mais informações, consulte Configuração de rede de cliente.

ObservaçãoObservação

Alguns dos utilitários do SQL Server definem uma ou mais das configurações ANSI como OFF para manter a compatibilidade com versões anteriores dos utilitários.

Configurações de opções SET para DB-Library e Embedded SQL para conexões C

Por padrão, DB-Library e Embedded SQL para aplicativos C não definem nenhuma opção de sessão. Os sistemas que usam essas APIs precisam codificar os aplicativos para emitir as instruções SET adequadas ou alterar o padrão de banco de dados ou de servidor para as configurações corretas.

Precedência para definição de opções

As configurações ON ou OFF para as opções SET podem ser especificadas em vários níveis. A configuração final de cada opção de sessão é determinada pela operação de maior precedência que define a opção. A precedência das operações de configuração de sessão é listada a seguir, com a maior precedência no topo da lista:

  • Qualquer aplicativo pode substituir explicitamente qualquer configuração padrão executando uma instrução SET depois de conectar-se a um servidor. A instrução SET substitui todas as configurações anteriores e pode ser usada para ativar e desativar as opções dinamicamente conforme o aplicativo é executado. As configurações da opção são aplicáveis somente à sessão de conexão atual.

  • Os aplicativos OLE DB e ODBC podem especificar as configurações de opção que estão em vigor no momento da conexão, especificando as configurações de opção em cadeias de conexão. As configurações de opção são aplicáveis somente à sessão de conexão atual.

  • As opções SET especificadas para uma fonte de dados ODBC do SQL Server usando o aplicativo ODBC no Painel de Controle ou a função de ODBC SQLConfigDataSource.

  • Configurações padrão para um banco de dados. Você pode especificar esses valores usando ALTER DATABASE ou o Pesquisador de Objetos no SQL Server Management Studio.

  • Configurações padrão para um servidor. Você pode especificar esses valores usando sp_configure ou o Pesquisador de Objetos no SQL Server Management Studio para definir a opção de configuração de servidor nomeada opções do usuário.

Por exemplo, o valor padrão de ODBC para ANSI_NULLS é ON. Porém, você pode substituir esse valor definindo essa opção como OFF em uma cadeia de conexão ODBC ou usando as instruções SET depois de conectar-se ao banco de dados.

Procedimentos armazenados e gatilhos

Os procedimentos armazenados e gatilhos devem ser escritos para funcionar com as seis opções SET necessárias para oferecer suporte aos índices em exibições e colunas computadas. O otimizador de consulta não usa um índice em uma exibição ou coluna computada em instruções SELECT que são executadas por um procedimento armazenado ou gatilho quando as opções SET estão definidas incorretamente. Uma instrução INSERT, UPDATE ou DELETE no procedimento armazenado ou no gatilho que modifique os valores de dados armazenados na exibição indexada ou coluna computada gera um erro.

Considerações

A instrução SET pode alterar as opções de sessão dinamicamente. Portanto a emissão de instruções SET em um banco de dados que tem índices em exibições e colunas computadas indexadas deve ser executada cuidadosamente. Por exemplo, um aplicativo pode fazer uma conexão na qual as configurações padrão permitam que uma exibição indexada ou coluna computada indexada sejam referenciadas. No entanto, se a conexão chamar um procedimento armazenado ou um gatilho que tenha uma primeira instrução SET de ANSI_WARNINGS OFF, essa instrução substituirá os padrões ou configurações anteriores para ANSI_WARNINGS. Nesse caso, o otimizador ignora todas as exibições indexadas ou colunas computadas indexadas quando processa qualquer instrução no procedimento armazenado ou no gatilho.

Três outras opções de sessão podem afetar potencialmente o formato de conjuntos de resultados: DATEFIRST, DATEFORMAT e LANGUAGE. Todas as funções cujos resultados seriam afetados através de mudanças nessas opções são classificadas como não determinísticas e não podem ser usadas em exibições indexadas ou colunas computadas indexadas.