Microsoft distribuuje opravy systému Microsoft SQL Server 2008 jako jeden soubor ke stažení. Vzhledem k tomu, že opravy jsou kumulativní, obsahuje každá nová verze všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí verze opravy pro SQL Server 2008.
Příznaky
Vezměte v úvahu následující scénář:
- V systému Microsoft SQL Server 2008 spustíte dotaz, který pomocí funkce ISNULL() vybere hodnoty, které jsou ve sloupci s možnou hodnotou null.
- Tabulka, která obsahuje sloupec s možnou hodnotou null, se spojí s jinou tabulkou ve sloupci s možnou hodnotou null.
- Plán dotazu vytvořený Optimalizátorem dotazů používá spojení hash, zařazovací číslo nebo tabulku řazení pod operátorem JOIN.
V tomto scénáři se zobrazí následující chybová zpráva:
Poznámka
Zpráva 681, úroveň 16, stav 3, řádek 2
Pokoušíme se nastavit hodnotu sloupce, který nemá možnost hodnoty NULL, na hodnotu NULL.
Příčina
Optimalizátor dotazů určuje, že sloupec, na který se odkazuje ve funkci ISNULL(), nemůže mít hodnotu null, protože operátor spojení odmítá hodnoty NULL. Potom v plánu dotazu Optimalizátor dotazů vloží výraz, který je ve funkci ISNULL() pod operátor JOIN. Kromě toho může být hodnota výrazu NULL. Optimalizátor dotazů však znovu neodvodí vlastnost nullability výrazu. V plánu dotazu se pak pracovní tabulka použije k implementaci spojení hash, zařazovací tabulky nebo tabulky řazení obsahující výraz. Navíc je odpovídající sloupec v pracovní tabulce deklarován jako sloupec bez možnosti hodnoty null. Když se dotazovací modul systému SQL Server pokusí vložit hodnoty NULL do pracovní tabulky, dojde k chybě.
Řešení
Oprava tohoto problému byla poprvé vydána v kumulativní aktualizaci 7 pro SQL Server 2008 Service Pack 1. Další informace o tomto balíčku kumulativních aktualizací naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:
979065 Balíček kumulativní aktualizace 7 pro SQL Server 2008 Service Pack 1Poznámka: Vzhledem k tomu, že buildy jsou kumulativní, obsahuje každá nová verze opravy všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí verze opravy pro SQL Server 2008. Doporučujeme zvážit použití nejnovější verze opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:
970365 Buildy SQL Server 2008 vydané po vydání aktualizace Service Pack 1 SQL Server 2008
Opravy hotfix pro Microsoft SQL Server 2008 se vytvářejí pro konkrétní aktualizace Service Pack pro SQL Server. Opravu hotfix pro SQL Server 2008 Service Pack 1 je nutné nainstalovat k instalaci systému SQL Server 2008 Service Pack 1. Ve výchozím nastavení jsou všechny opravy hotfix poskytované v aktualizaci Service Pack pro SQL Server zahrnuty do další aktualizace Service Pack pro SQL Server.
Alternativní řešení
Chcete-li tento problém vyřešit, použijte jednu z následujících metod.
Metoda 1
Odeberte z dotazu funkci ISNULL().
Poznámka: Protože sloupec, který je v této funkci, pochází z operátoru JOIN, který odmítá hodnoty NULL, je funkce ISNULL() redundantní.
Metoda 2
Přepište dotaz tak, aby plán dotazu nepoužíval spojení hash, zařazovací číslo ani tabulku řazení. Pokud například dotaz obsahuje klauzuli ORDER BY, vytvořte clusterovaný nebo pokrývající index, který poskytuje požadované řazení a obsahuje všechny požadované sloupce. Při použití této metody optimalizátor dotazů nepoužívá tabulku řazení.
Stav
Společnost Microsoft potvrdila, že se jedná o problém produktů Microsoft, které jsou uvedeny v sekci Platí pro.
Reference
Informace o modelu přírůstkové údržby pro SQL Server naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:
935897 Tým SQL Server poskytuje k poskytování oprav hotfix pro hlášené problémy model přírůstkové údržby
Další informace o schématu pojmenování aktualizací pro aktualizace serveru SQL Server naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:
822499 Nové schéma pojmenovávání balíčků aktualizací softwaru Microsoft SQL Server
Další informace o terminologii aktualizací softwaru naleznete v následujícím článku znalostní báze znalostní báze Microsoft Knowledge Base:
824684 Popis standardní terminologie používané k popisu aktualizací softwaru společnosti Microsoft