Update: Fehlermeldung "Versucht, eine nicht-NULL-fähigen Spalte Wert auf NULL festlegen", wenn Sie eine Abfrage ausführen verwendet die ISNULL()-Funktion Werte einer Spalte NULL-Werte in SQL Server 2008 auswählen

Microsoft stellt Updates für Microsoft SQL Server 2008 als downloadbare Datei. Da die kumulativ sind, enthält jede neue Version alle Hotfixes und alle Sicherheitsupdates, die mit früheren SQL Server 2008 geliefert wurden.

Problembeschreibung

Betrachten Sie das folgende Szenario:
  • In Microsoft SQL Server 2008 führen Sie eine Abfrage, die die ISNULL() -Funktion verwendet, um die Werte auszuwählen, die in einer Spalte NULL-Werte zulässt.
  • Die Tabelle, die mit der Spalte NULL-Werte zulässt, ist mit einer anderen Tabelle die Spalte nullable verknüpft.
  • Der Abfrageoptimierer erstellten Abfrageplan verwendet ein Hash-Join, eine Rolle oder eine Art Tabelle der JOIN -Operator.
In diesem Szenario wird die folgende Fehlermeldung angezeigt:
Msg 681, Ebene 16, State 3, Zeile 2

Versuch, eine nicht-NULL-fähigen Spalte auf NULL festgelegt.

Ursache

Abfrageoptimierer fest, dass die Spalte in der Funktion ISNULL() verwiesen wird NULL-da der Join-Operator Nullwerte ablehnt. Dann legt der Abfrageplan Abfrageoptimierer Ausdrucks, der in der Funktion ISNULL() unterhalb der JOIN -Operator. Darüber hinaus kann der Wert des Ausdrucks NULL sein. Jedoch Abfrageoptimierer nicht-NULL-Zulässigkeit-Eigenschaft für den Ausdruck neu abgeleitet. Anschließend wird in den Abfrageplan einer zum Implementieren die Hashverknüpfung, Spule oder die Sortiertabelle, die den Ausdruck enthält. Außerdem wird die entsprechende Spalte in der Tabelle als null deklariert. Wenn das SQL Server-Abfragemodul versucht, NULL-Werte in die Arbeitstabelle eingefügt, tritt der Fehler auf.

Problemlösung


Die Fehlerbehebung für dieses Problem wurde erstmals im kumulativen Update 7 für SQL Server 2008 Service Pack 1 veröffentlicht. Für weitere Informationen zu diesem kumulativen Update-Paket, klicken Sie auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
979065 kumulative Updatepaket 7 für SQL Server 2008 Service Pack 1
Hinweis Da diese Builds kumulativ sind, enthält jede neue Veröffentlichung alle Hotfixes und alle die Sicherheitsupdates, die in den vorherigen SQL Server 2008 Fix-Veröffentlichung enthalten waren. Wir empfehlen Sie prüfen die neueste Update-Version, die diesen Hotfix enthält. Klicken Sie für weitere Informationen auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
970365 die SQL Server 2008 builds, die nach der Freigabe von SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008-Hotfixes sind für bestimmte SQL Server Servicepacks erstellt. Sie müssen SQL Server 2008 Service Pack 1-Hotfix eine Installation von SQL Server 2008 Service Pack 1 anwenden. Standardmäßig ist jeder Hotfix, der in einem SQL Server Servicepack bereitgestellt wird, in einem nächsten Servicepack für SQL Server enthalten.

PROBLEMUMGEHUNG

Um dieses Problem zu umgehen, verwenden Sie eine der folgenden Methoden.

Methode 1

Entfernen Sie die ISNULL() -Funktion aus der Abfrage.

Hinweis Da die Spalte, die in dieser Funktion Operator JOIN , die NULL-Werte ablehnt stammen, ist die Funktion ISNULL() redundant.

Methode 2

Schreiben Sie die Abfrage, damit der Abfrageplan kein Hash-Join, eine Rolle oder eine Sortiertabelle verwendet. Wenn die Abfrage eine ORDER BY-Klausel enthält, erstellen Sie einen Cluster oder für Index, der erforderliche Reihenfolge und alle erforderliche Spalten ein. Wenn Sie diese Methode verwenden, verwendet Abfrageoptimierer eine Sortiertabelle nicht.

Status

Microsoft hat bestätigt, dass es sich um ein Problem bei den Microsoft-Produkten handelt, die im Abschnitt „Eigenschaften“ aufgeführt sind.

Referenzen

Informationen zum inkrementellen Dienstmodell für SQL Server klicken Sie auf die folgenden Artikelnummer der Microsoft Knowledge Base:

935897 erläutert wird ein inkrementelles Dienstmodell steht der SQL Server-Team zu Hotfixes für gemeldete Probleme



Weitere Informationen zum Benennungsschema für SQL Server-Updates klicken Sie auf die folgenden Artikelnummer der Microsoft Knowledge Base:

822499 Neues Benennungsschema für Softwareupdatepakete für Microsoft SQL Server


Um weitere Informationen zur Terminologie für Softwareupdates zu erhalten, klicken Sie auf die folgende Artikelnummer, um den Artikel der Microsoft Knowledge Base anzuzeigen:
824684 Erläuterung von der standardmäßigen Standardbegriffen bei Microsoft Softwareupdates
Eigenschaften

Artikelnummer: 981037 – Letzte Überarbeitung: 12.01.2017 – Revision: 1

Feedback