Microsoft dystrybuuje poprawki do programu Microsoft SQL Server 2008 w postaci jednego pliku do pobrania. Ponieważ poprawki są zbiorcze, każda nowa wersja zawiera wszystkie poprawki i poprawki zabezpieczeń zawarte w poprzedniej wersji poprawek programu SQL Server 2008.
Objawy
Rozważmy następujący scenariusz:
- W programie Microsoft SQL Server 2008 uruchamiasz zapytanie używające funkcji ISNULL() w celu wybrania wartości znajdujących się w kolumnie dopuszczającej wartość null.
- Tabela zawierająca kolumnę dopuszczającą wartości null jest sprzężona z inną tabelą w kolumnie dopuszczającej wartość null.
- Plan zapytania tworzony przez optymalizator zapytań wykorzystuje sprzężenie mieszane, bufor lub tabelę sortowania poniżej operatora JOIN.
W tym scenariuszu jest wyświetlany następujący komunikat o błędzie:
Uwaga
Wiadomość 681, Poziom 16, Stan 3, Wiersz 2
Próba ustawienia wartości kolumny niezgodnej z wartością NULL na NULL.
Przyczyna
Optymalizator zapytań określa, że kolumna, do której odwołuje się funkcja ISNULL(), nie dopuszcza wartości null, ponieważ operator sprzężenia odrzuca wartości NULL. Następnie w planie zapytania Optymalizator zapytań wypycha wyrażenie zawarte w funkcji ISNULL() poniżej operatora JOIN. Ponadto wyrażenie może mieć wartość NULL. Optymalizator zapytań nie wyprowadza jednak ponownie właściwości dopuszczalności null dla wyrażenia. Następnie w planie kwerendy używana jest tabela robocza do zaimplementowania sprzężenia skrótów, buforu lub tabeli sortowania zawierającej wyrażenie. Ponadto odpowiednia kolumna w tabeli roboczej jest zadeklarowana jako niedopuszczająca wartości null. Gdy aparat zapytań programu SQL Server próbuje wstawić wartości NULL do tabeli roboczej, występuje błąd.
Rozwiązanie
Poprawkę rozwiązującą ten problem opublikowano po raz pierwszy w aktualizacji zbiorczej 7 dla dodatku Service Pack 1 dla programu SQL Server 2008. Aby uzyskać więcej informacji dotyczących tego pakietu aktualizacji skumulowanych, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:
979065 Pakiet aktualizacji zbiorczej 7 dla dodatku Service Pack 1 dla systemu SQL Server 2008Uwaga Ponieważ te kompilacje są zbiorcze, każda nowa poprawka zawiera wszystkie poprawki i poprawki zabezpieczeń, które zostały uwzględnione w poprzedniej wersji poprawki SQL Server 2008. Zalecamy rozważenie zastosowania najnowszej wersji poprawki zawierającej tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:
970365 Kompilacje SQL Server 2008 wydane po wydaniu dodatku Service Pack 1 SQL Server 2008
Poprawki programu Microsoft SQL Server 2008 są tworzone dla określonych dodatków Service Pack dla programu SQL Server. Należy zastosować poprawkę dodatku Service Pack 1 dla programu SQL Server 2008 do instalacji dodatku Service Pack 1 dla programu SQL Server 2008. Domyślnie każda poprawka dostępna w dodatku Service Pack dla programu SQL Server jest uwzględniona w następnym dodatku Service Pack dla programu SQL Server.
Obejście
Aby obejść ten problem, użyj jednej z następujących metod.
Metoda 1
Usuń funkcję ISNULL() z zapytania.
Uwaga Ponieważ kolumna w tej funkcji pochodzi z operatora JOIN, który odrzuca wartości NULL, funkcja ISNULL() jest zbędna.
Metoda 2
Zmodyfikuj zapytanie, aby plan zapytania nie używał sprzężenia skrótów, buforu ani tabeli sortowania. Jeśli na przykład zapytanie zawiera klauzulę ORDER BY, utwórz indeks grupowany lub pokrywający, który określa wymaganą kolejność i zawiera wszystkie wymagane kolumny. W przypadku korzystania z tej metody optymalizator zapytań nie używa tabeli sortowania.
Stan
Firma Microsoft potwierdziła, że jest to problem dotyczący produktów firmy Microsoft wymienionych w sekcji „Dotyczy”.
Źródła informacji
Aby uzyskać informacje dotyczące modelu obsługi przyrostowej dla programu SQL Server, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:
935897 Zespół SQL Server udostępnia model obsługi przyrostowej w celu dostarczania poprawek dla zgłoszonych problemów
Aby uzyskać więcej informacji dotyczących schematu nazewnictwa aktualizacji programu SQL Server, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:
822499 Nowy schemat nazewnictwa pakietów aktualizacji oprogramowania Microsoft SQL Server
Aby uzyskać więcej informacji dotyczących terminologii związanej z aktualizacjami oprogramowania, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:
824684 Opis standardowej terminologii używanej do opisywania aktualizacji oprogramowania firmy Microsoft