CORRECÇÃO: Mensagem de erro "Tentando definir o valor da coluna NULL possa como NULL" ao executar uma consulta que usa a função ISNULL() para selecionar valores de uma coluna anulável no SQL Server 2008

Traduções deste artigo Traduções deste artigo
ID do artigo: 981037 - Exibir os produtos aos quais esse artigo se aplica.
A Microsoft distribui correções do Microsoft SQL Server 2008 como um arquivo para download. Como as correções são cumulativas, cada versão nova contém todos os hotfixes e todas as correções de segurança que foram incluídas com o SQL Server 2008 anteriores corrigir lançamento.
Expandir tudo | Recolher tudo

Sintomas

Considere o seguinte cenário:
  • No Microsoft SQL Server 2008, você pode executar uma consulta que usa a função ISNULL() para selecionar valores em uma coluna anulável.
  • A tabela que contém a coluna anulável é associada com outra tabela em coluna anulável.
  • O plano de consulta é criado pelo otimizador de consulta usa uma associação de hash, um spool ou uma tabela de classificação abaixo o operador JOIN.
Nesse cenário, você receber a seguinte mensagem de erro:
Msg 681, nível 16, estado 3, linha 2
Tentativa de definir o valor da coluna NULL capaz para NULL.

Causa

Otimizador de consulta determina que a coluna mencionada na função ISNULL() é não anulável porque o operador de associação rejeita valores nulos. Em seguida, no plano de consulta, otimizador de consultas coloca a expressão que está na função ISNULL() abaixo operador JOIN. Além disso, o valor da expressão pode ser NULL. No entanto, otimizador de consulta não re-derive a propriedade condição de nulidade da expressão. Em seguida, no plano de consulta, uma tabela de trabalho é usada para implementar a junção de hash, o spool ou a tabela de classificação inclui a expressão. Além disso, a coluna correspondente na tabela de trabalho é declarada como não nulo. Quando o mecanismo de consulta do SQL Server tenta inserir valores nulos na tabela de trabalho, o erro ocorre.

Resolução

A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 7 para SQL Server 2008 Service Pack 1. Para obter mais informações sobre esse pacote de atualizações cumulativas, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
979065Pacote de atualizações cumulativas 7 para SQL Server 2008 Service Pack 1
Observação: Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança que foram incluídas com o SQL Server 2008 anteriores corrigir lançamento. Recomendamos que você considere a aplicação a versão mais recente de correção que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
970365Compilações do SQL Server 2008 que foram lançadas lançamento após o lançamento do SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008 hotfixes são criados para service packs do SQL Server específicos. Você deve aplicar um hotfix do SQL Server 2008 Service Pack 1 para uma instalação do SQL Server 2008 Service Pack 1. Por padrão, qualquer hotfix fornecidas em um service pack do SQL Server está incluído no próximo service pack do SQL Server.

Como Contornar

Para contornar este problema, use um dos seguintes métodos.

Método 1

Remova a função ISNULL() da consulta.

Observação:Porque a coluna que está nessa função vem do operador JOIN que rejeita valores NULL, a função ISNULL() é redundante.

Método 2

Reescreva a consulta para que o plano de consulta não usar uma junção de hash, um spool ou uma tabela de classificação. Por exemplo, se sua consulta contiver uma cláusula ORDER BY, crie um índice em cluster ou tratando que fornece a ordenação necessários e inclui todas as colunas obrigatórias. Quando você usa esse método, o otimizador de consultas não usa uma tabela de classificação.

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Referências

Para obter informações sobre o modelo de serviços incrementais para SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
935897Há um modelo de serviços incrementais da equipe do SQL Server para fornecer hotfixes para problemas relatados


Para obter mais informações sobre o esquema de nomeação para atualizações do SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
822499Novo esquema para nomeação dos pacotes de atualização de software Microsoft SQL Server


Para obter mais informações sobre a terminologia da atualização, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
824684Descrição da terminologia padrão usada para descrever as atualizações de software

Propriedades

ID do artigo: 981037 - Última revisão: segunda-feira, 15 de março de 2010 - Revisão: 1.1
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Workgroup
Palavras-chave: 
kbmt kbhotfixserver kbexpertiseadvanced kbsurveynew kbqfe kbfix KB981037 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 981037

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com