CORRECÇÃO: Mensagem de erro "Tentativa definir o valor de uma coluna não consegue NULL para NULL" quando executa uma consulta que utiliza a função ISNULL() para seleccionar valores de uma coluna nullable no SQL Server 2008

Traduções de Artigos Traduções de Artigos
Artigo: 981037 - Ver produtos para os quais este artigo se aplica.
A Microsoft distribui correcções Microsoft SQL Server 2008 como um ficheiro transferível. Uma vez que as correcções são cumulativas, cada nova edição contém todas as correcções e todas as correcções de segurança que foram incluídas com o SQL Server 2008 anteriores corrigir lançamento.
Expandir tudo | Reduzir tudo

Sintomas

Considere o seguinte cenário:
  • No Microsoft SQL Server 2008, executar uma consulta que utiliza a função ISNULL() para seleccionar valores numa coluna nullable.
  • A tabela que contém as colunas nullable está associada com outra tabela, as colunas nullable.
  • O plano de consulta que é criado pelo optimizador de consultas utilize uma associação de hash, um spool ou uma tabela de ordenação abaixo o operador JOIN.
Neste cenário, recebe a seguinte mensagem de erro:
Msg 681, nível de 16 de estado 3, linha 2
Tentar definir o valor de uma coluna não consegue NULL como NULL.

Causa

Consulta Optimizer determina que a coluna que está referenciada na função ISNULL() é não nulo uma vez que o operador de associação rejeita valores NULL. Em seguida, no plano de consulta, o Optimizador de consultas empurra a expressão que está a ser a função ISNULL() abaixo o operador JOIN. Além disso, o valor da expressão pode ser NULL. No entanto, o Optimizador de consultas não re-derive a propriedade de condição de nulidade da expressão. Em seguida, no plano de consulta, uma tabela de trabalho é utilizada para implementar a associação de hash, o spool ou a tabela de ordenação que inclui a expressão. Além disso, a coluna correspondente na tabela de trabalho foi declarada como não nulo. Quando o motor de consulta do SQL Server tenta inserir a tabela trabalho valores NULL, o erro ocorre.

Resolução

A correcção para este problema foi disponibilizada pela primeira vez na actualização cumulativa 7 para SQL Server 2008 Service Pack 1. Para obter mais informações sobre este pacote de actualização cumulativa, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
979065Pacote de actualização cumulativa 7 para SQL Server 2008 Service Pack 1
Nota Uma vez que as compilações são cumulativas, cada nova versão da correcção contém todas as correcções e todas as correcções de segurança que foram incluídas com o SQL Server 2008 anteriores corrigir lançamento. Recomendamos que considerem a aplicação pela mais recente versão de correcção que contenha esta correcção. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
970365O SQL Server 2008 cria disponibilizadas após o lançamento do SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008 correcções são criadas para service packs do SQL Server específicos. Tem de aplicar uma correcção SQL Server 2008 Service Pack 1 para uma instalação do SQL Server 2008 Service Pack 1. Por predefinição, qualquer correcção fornecida num service pack do SQL Server está incluída no próximo service pack do SQL Server.

Como contornar

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

Método 1

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

NotaUma vez que a coluna que está a esta função provém o operador JOIN que rejeite valores NULL, a função ISNULL() é redundante.

Método 2

Rescrever a consulta de modo a que o plano de consulta não utilize uma associação de hash, um spool ou uma tabela de ordenação. Por exemplo, se a sua consulta contiver uma cláusula ORDER BY, crie um índice agrupado ou revestimento que fornece a ordenação necessários e inclui todas as colunas necessárias. Quando utiliza este método, o Optimizador de consultas não utiliza uma tabela de ordenação.

Ponto Da Situação

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

Referências

Para obter informações sobre o modelo de assistência incremental para o SQL Server, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
935897Um modelo de assistência incremental está disponível a partir de equipa do SQL Server para proporcionar correcções para problemas comunicados


Para obter mais informações sobre o esquema de atribuição de nomes para actualizações do SQL Server, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
822499Novo esquema de nomenclatura para pacotes de actualização de software do Microsoft SQL Server


Para obter mais informações sobre a terminologia de actualizações de software, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
824684Descrição da terminologia padrão utilizada para descrever actualizações de software da Microsoft

Propriedades

Artigo: 981037 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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