Společnost Microsoft distribuuje Microsoft SQL Server 2008 R2 Service Pack 2 (SP2) jako jeden soubor ke stažení. Protože jsou opravy kumulativní, každá nová verze obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí verze systému SQL Server 2008 R2 Service Pack 2 – oprava.
Příznaky
Při spuštění dotazu v Microsoft SQL serveru 2008 R2 SP2 nebo Microsoft SQL Server 2012 může docházet k chybám, když platí následující podmínky:
-
Dotaz používá klauzuli Cross Apply přes výsledek klauzule Full JOIN .
-
Data tabulky jsou poskytnuta voláním uživatelem definované funkce s hodnotou tabulky v klauzuli Full JOIN .
-
Funkce přijme název sloupce jako parametr a vrátí výsledek jako tabulku.
Můžete třeba spustit dotaz podobný následujícímu:
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
Poznámka K tomuto problému nedochází v Microsoft SQL serveru 2012.
Řešení
Informace o kumulativní aktualizaci
Kumulativní aktualizace 7 pro SQL Server 2012
Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 7. Další informace o tom, jak získat tento kumulativní balíček aktualizací pro SQL Server 2012, najdete v následujícím článku znalostní báze Microsoft Knowledge Base:
2823247 Kumulativní balíček aktualizací 7 pro SQL Server 2012Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozího SQL serveru 2012 Oprava. Doporučujeme zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
2692828 Buildy SQL Server 2012, které byly vydány po vydání SQL Server 2012
Kumulativní aktualizace 3 pro SQL Server 2012 SP1
Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 3. Další informace o tom, jak získat tento kumulativní balíček aktualizací pro SQL Server 2012 SP1, najdete v následujícím článku znalostní báze Microsoft Knowledge Base:
2812412 Kumulativní balíček aktualizací 3 pro SQL Server 2012 Service Pack 1Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí verze aktualizace SQL Server 2012 SP1. Doporučujeme zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
2772858 Buildy SQL Server 2012, které byly vydány po vydání SQL Server 2012 Service Pack 1
Kumulativní aktualizace 5 pro SQL Server 2008 R2 SP2
Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 5. Další informace o tom, jak získat tento kumulativní balíček aktualizací pro SQL Server 2008 R2 SP 2, najdete v následujícím článku znalostní báze Microsoft Knowledge Base:
2797460 Kumulativní aktualizace 5 pro SQL Server 2008 R2 Service Pack 2Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí verze systému SQL Server 2008 R2 SP 2. Doporučujeme zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
2730301 Sestavení SQL Server 2008 R2, která byla vydána po SQL serveru 2008 R2 Service Pack 2, byla vydána
Stav
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.
Řešení
Chcete-li tento problém vyřešit, použijte místo úplného spojení klauzuli Join . Například změníte dotaz uvedený v části Příznaky na dotaz, který se podobá následujícímu:
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
Další informace
Další informace o použití klauzule Cross Apply najdete na následujícím webu Microsoft TechNet: