Oprava: Chybová zpráva "Pokus nastavit hodnotu non-NULL-možné sloupce NULL" při spuštění dotazu používá funkci ISNULL() vyberte hodnoty sloupce s možnou hodnotou Null v SQL Server 2008

Společnost Microsoft distribuuje opravy Microsoft SQL Server 2008 jako jednoho souboru ke stažení. Protože jsou kumulativní opravy, každá nová verze tedy obsahuje všechny opravy hotfix a opravit všechny opravy zabezpečení, které byly součástí předchozích SQL Server 2008 release.

Příznaky

Jde o takovouto situaci:
  • V Microsoft SQL Server 2008 spustíte dotaz, který používá funkci ISNULL() vyberte hodnoty, které jsou ve sloupci s možnou hodnotou Null.
  • Tabulka, která obsahuje sloupec s možnou hodnotou null je připojen k jiné tabulce ve sloupci s možnou hodnotou Null.
  • Plán dotazů, který je vytvořen pomocí optimalizace dotazu používá hash spojení, tiskové fronty nebo řazení tabulky pod operátor JOIN .
V tomto scénáři obdržíte následující chybová zpráva:
Msg 681, úroveň 16, stav 3, řádek 2

Pokus nastavit hodnotu non-NULL-možné sloupce na hodnotu NULL.

Příčina

Optimalizace dotazů určí, že sloupec, který je odkazován ve funkci ISNULL() Structure protože operátor spojení odmítne hodnoty NULL. Potom v plánu dotazu tlačí optimalizace dotazu výraz, který je ve funkci ISNULL() pod operátor JOIN . Navíc hodnota výrazu může být NULL. Nicméně Optimalizátor dotazů není znovu odvozen vlastnost Null pro výraz. Potom v plánu dotazu tabulku práce slouží k implementaci algoritmu hash spojení, fronty nebo řazení tabulky, která obsahuje výraz. Navíc je odpovídající sloupec v tabulce pracovního deklarován jako Structure. Dotazovací modul SQL Server se pokusí vložit hodnoty NULL do tabulky prací, dojde k chybě.

Řešení


Oprava tohoto problému byla vydána nejprve v kumulativní aktualizaci 7 pro SQL Server 2008 Service Pack 1. Další informace o tomto balíčku kumulativní aktualizace klepněte na následující číslo článku databáze Microsoft Knowledge Base:
979065 kumulativní aktualizace balíčku 7 pro SQL Server 2008 Service Pack 1
Poznámka: Vzhledem k tomu, sestavení jsou kumulativní, každá nová verze oprava obsahuje všechny opravy hotfix a opravit všechny opravy zabezpečení, které byly součástí předchozích SQL Server 2008 release. Doporučujeme zvážit použití nejnovější vydání oprava, která obsahuje tuto opravu hotfix. Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
970365 SQL Server 2008 sestavení, které byly vydány po vydání SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008 opravy hotfix jsou vytvořeny pro konkrétní aktualizace service Pack pro SQL Server. Opravy hotfix serveru SQL Server 2008 Service Pack 1 musí použít k instalaci aplikace SQL Server 2008 Service Pack 1. Ve výchozím žádné opravy hotfix, která je poskytována v aktualizace service pack serveru SQL Server je součástí další aktualizaci service pack pro SQL Server.

Jak potíže obejít

Chcete-li tento problém vyřešit, použijte jednu z následujících metod.

Metoda 1

Odeberte funkci ISNULL() z dotazu.

Poznámka: Vzhledem k tomu, že sloupec, který je v této funkci pochází ze spojení operátor, který odmítne hodnoty NULL, funkce ISNULL() je redundantní.

Metoda 2

Přepište dotaz tak, aby plán dotazů nepoužívá algoritmus hash spojení, tiskové fronty nebo řazení tabulky. Například pokud dotaz obsahuje klauzuli ORDER BY, vytvoření indexu clustery nebo o poskytuje požadované řazení, která obsahuje všechny požadované sloupce. Při použití této metody optimalizace dotazů nebude používat řazení tabulky.

Stav

Společnost Microsoft potvrdila, že se jedná o problém v produktech společnosti Microsoft, které jsou uvedeny v části "Platí pro".

Odkazy

Informace o přírůstkové Model servis pro SQL Server klepněte na následující číslo článku databáze Microsoft Knowledge Base:

935897 dílčí Model obsluhy je k dispozici z týmu SQL Server doručit opravy hotfix pro nahlášené potíže



Další informace o schéma názvů pro aktualizace serveru SQL Server klepněte na následující číslo článku databáze Microsoft Knowledge Base:

822499 Nové schéma přidělování názvů balíčkům aktualizací softwaru Microsoft SQL Server pro


Pro další informace o terminologii používané v aktualizacích softwaru, klepněte na následující číslo článku k zobrazení článku v databázi Microsoft Knowledge Base:
824684 Popis standardní terminologie používané při popisu aktualizací softwaru společnosti Microsoft
Vlastnosti

ID článku: 981037 - Poslední kontrola: 12. 1. 2017 - Revize: 1

Váš názor