Firma Microsoft rozpowszechnia poprawki programu Microsoft SQL Server 2008 R2 z dodatkiem Service Pack 2 (SP2) jako jednego pliku do pobrania. Ponieważ poprawki są kumulatywne, każdy nowy pakiet zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej wersji poprawki SQL Server 2008 R2 z dodatkiem Service Pack 2.

Symptomy

Po uruchomieniu zapytania w programie Microsoft SQL Server 2008 R2 z dodatkiem SP2 lub Microsoft SQL Server 2012 mogą zostać wyświetlone niepoprawne wyniki, gdy są spełnione następujące warunki:

  • Kwerenda używa klauzuli apply w wyniku klauzuli Full Join .

  • Dane tabeli są udostępniane przez wywołanie funkcji zdefiniowanej przez użytkownika w tabeli w klauzuli Full Join .

  • Funkcja przyjmuje jako parametr nazwę kolumny i zwraca wyniki w postaci tabeli.

Na przykład uruchom zapytanie podobne do następujących:

SELECT * FROM tablename CROSS APPLY (    SELECT * FROM        (SELECT * FROM [dbo].[func_GetTableFromXml](xmlColumn) WHERE nodeParentName = 'New') s1     FULL JOIN         (SELECT * FROM [dbo].[func_GetTableFromXml](xmlColumn) WHERE nodeParentName = 'Old') s2     ON s1.nodeName = s2.nodeName    ) s  

Uwaga Ten problem nie występuje w programie Microsoft SQL Server 2012.

Rozwiązanie

Informacje o aktualizacji zbiorczej

Zbiorcza aktualizacja 7 dla programu SQL Server 2012

Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 7. Aby uzyskać więcej informacji na temat uzyskiwania tego pakietu aktualizacji zbiorczej dla programu SQL Server 2012, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2823247 Pakiet aktualizacji zbiorczej 7 dla programu SQL Server 2012Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniej wersji poprawki SQL Server 2012. Zalecamy zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2692828 Kompilacje programu SQL Server 2012 wydane po wydaniu programu SQL Server 2012

Zbiorcza aktualizacja 3 dla programu SQL Server 2012 z dodatkiem SP1

Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 3. Aby uzyskać więcej informacji na temat sposobu uzyskiwania tego pakietu aktualizacji zbiorczej dla programu SQL Server 2012 z dodatkiem SP1, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2812412 Pakiet aktualizacji zbiorczej 3 dla programu SQL Server 2012 z dodatkiem Service Pack 1Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniej wersji poprawki SQL Server 2012 SP1. Zalecamy zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2772858 Kompilacje programu SQL Server 2012 wydane po opublikowaniu dodatku Service Pack 1 dla programu SQL Server 2012

Zbiorcza aktualizacja 5 dla programu SQL Server 2008 R2 z dodatkiem SP2

Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 5. Aby uzyskać więcej informacji na temat sposobu uzyskiwania tego zbiorczego pakietu aktualizacji dla programu SQL Server 2008 R2 SP 2, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2797460 Pakiet aktualizacji zbiorczej 5 dla programu SQL Server 2008 R2 z dodatkiem Service Pack 2Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń dołączone do poprzedniej wersji programu SQL Server 2008 R2 z dodatkiem SP 2. Zalecamy zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2730301 Kompilacja programu SQL Server 2008 R2 opublikowanych po wydaniu programu SQL Server 2008 R2 z dodatkiem Service Pack 2

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".

Obejście

Aby obejść ten problem, użyj klauzuli Full Merge Join zamiast klauzuli Full Join . Na przykład możesz zmienić kwerendę wymienioną w sekcji "Symptomy", aby kwerenda była podobna do następującej:

SELECT * FROM tablename CROSS APPLY (    SELECT * FROM        (SELECT * FROM [dbo].[func_GetTableFromXml](xmlColumn) WHERE nodeParentName = 'New') s1     FULL MERGE JOIN         (SELECT * FROM [dbo].[func_GetTableFromXml](xmlColumn) WHERE nodeParentName = 'Old') s2     ON s1.nodeName = s2.nodeName    ) s 

Więcej informacji

Aby uzyskać więcej informacji na temat korzystania z klauzuli Cross Apply , przejdź do następującej witryny internetowej Microsoft TechNet:

Ogólne informacje na temat korzystania z klauzuli CROSS APPLY

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.