FIX: Messaggio di errore "Attempting to impostato il valore della colonna non possibile NULL su NULL" quando si esegue una query che utilizza la funzione ISNULL() per selezionare i valori di una colonna nullable in SQL Server 2008.

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 981037
Microsoft distribuisce le correzioni Microsoft SQL Server 2008 come un unico file scaricabile. Poiché le correzioni sono cumulative, ogni nuova versione contiene tutti gli hotfix e tutte le correzioni di protezione fornite con SQL Server 2008 precedente correggere rilascio.
Sintomi
Si consideri il seguente scenario:
  • In SQL Server 2008, è possibile eseguire una query che utilizza la funzione ISNULL() per selezionare i valori in una colonna nullable.
  • La tabella contenente la colonna nullable è unita in join con un'altra tabella alla colonna nullable.
  • Il piano di query viene creato da Query Optimizer utilizza un hash join, uno spooler o una tabella di ordinamento seguito l'operatore JOIN.
In questa situazione viene visualizzato il seguente messaggio d'errore:
Msg 681, livello 16, stato 3, riga 2
Tentativo di impostare il valore della colonna non possibile NULL a NULL.
Cause
Query Optimizer determina che la colonna in cui viene fatto riferimento nella funzione ISNULL() è non nullable poiché l'operatore di join vengono rifiutati i valori NULL. Quindi, nel piano della query, Query Optimizer inserisce l'espressione è la funzione ISNULL() seguito l'operatore JOIN. Inoltre, il valore dell'espressione può essere NULL. Query Optimizer non tuttavia re-derive proprietà valori Null dell'espressione. Quindi, nel piano della query, una tabella di lavoro viene utilizzata per implementare gli hash join, spooler o la tabella di ordinamento che include l'espressione. Inoltre, la colonna corrispondente nella tabella di lavoro viene dichiarata come non nullable. Quando il motore di query di SQL Server tenta di inserire valori NULL nella tabella di lavoro, si verifica l'errore.
Risoluzione
La correzione di questo problema è stata rilasciata prima nell'aggiornamento cumulativo 7 per SQL Server 2008 Service Pack 1. Per ulteriori informazioni su questo pacchetto di aggiornamento cumulativo, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
979065Pacchetto di aggiornamento cumulativo 7 per SQL Server 2008 Service Pack 1
Nota Poiché le generazioni sono cumulative, ogni nuova versione di correzione contiene tutti gli hotfix e tutte le correzioni di protezione fornite con SQL Server 2008 precedente correggere rilascio. Si consiglia di considerare l'applicazione alla versione più recente di correzione che contiene questo aggiornamento rapido (hotfix). Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
970365Versioni di SQL Server 2008 rilasciate dopo il rilascio di SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008 aggiornamenti rapidi vengono creati per specifici i service pack di SQL Server. È necessario applicare un hotfix di SQL Server 2008 Service Pack 1 per un'installazione di SQL Server 2008 Service Pack 1. Per impostazione predefinita, qualsiasi hotfix fornito in un service pack di SQL Server è incluso nel prossimo service pack di SQL Server.
Workaround
Per ovviare al problema, utilizzare uno dei metodi descritti di seguito.

Metodo 1

Rimuovere la funzione ISNULL() dalla query.

NotaPoiché la colonna che si trova in questa funzione proviene dall'operatore JOIN che rifiuta i valori NULL, la funzione ISNULL() è ridondante.

Metodo 2

Riscrivere la query in modo che il piano di query non utilizza un hash join, uno spooler o una tabella di ordinamento. Ad esempio, se la query contiene una clausola ORDER BY, creare un indice cluster o covering che fornisce l'ordine richiesto e include tutte le colonne obbligatorie. Quando si utilizza questo metodo, Query Optimizer non utilizza una tabella di ordinamento.
Status
Microsoft ha confermato che si tratta di un problema con i prodotti elencati nella sezione "Si applica a".
Riferimenti
Per informazioni sul modello di manutenzione incrementale per SQL Server, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
935897Un modello di manutenzione incrementale è disponibile dal team di SQL Server per distribuire gli aggiornamenti rapidi per i problemi segnalati


Per ulteriori informazioni sullo schema di denominazione degli aggiornamenti di SQL Server, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
822499Nuovo schema di denominazione per i pacchetti di aggiornamento software Microsoft SQL Server


Per ulteriori informazioni sulla terminologia di aggiornamento software, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
824684Descrizione della terminologia standard utilizzata per descrivere gli aggiornamenti software Microsoft

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 981037 - Ultima revisione: 03/15/2010 12:41:22 - Revisione: 1.1

Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Workgroup

  • kbmt kbhotfixserver kbexpertiseadvanced kbsurveynew kbqfe kbfix KB981037 KbMtit
Feedback