Корпорация Майкрософт распространяет Microsoft SQL Server 2008 R2 с пакетом обновления 2 (SP2) и предоставляет один загружаемый файл. Поскольку исправления являются кумулятивными, каждый новый выпуск содержит все исправления и все исправления для системы безопасности, которые были включены в предыдущий выпуск пакета обновления 2 (SP2) для SQL Server 2008 R2.
Проблемы
При выполнении запроса в Microsoft SQL Server 2008 R2 SP2 или в Microsoft SQL Server 2012 могут возблюдаться неверные результаты, если выполняются указанные ниже условия.
-
Запрос использует предложение перекрестного применения для результата полного предложения Join .
-
Данные таблицы обеспечиваются вызовом пользовательской функции, возвращающей табличное значение, в предложении Full Join .
-
Функция принимает имя столбца как параметр и возвращает результаты в виде таблицы.
Например, вы запускаете запрос, подобный следующему:
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
Примечание. Эта проблема не возникает в Microsoft SQL Server 2012.
Решение
Сведения о накопительном пакете обновления
Накопительное обновление 7 для SQL Server 2012
Исправление для этой проблемы впервые выпущено в накопительном обновлении 7. Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления для SQL Server 2012, щелкните следующий номер статьи базы знаний Майкрософт:
2823247 Накопительный пакет обновления 7 для SQL Server 2012Примечание. Так как сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2012. Рекомендуется установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
2692828 Сборки SQL Server 2012, выпущенные после выпуска SQL Server 2012
Накопительное обновление 3 для SQL Server 2012 с пакетом обновления 1 (SP1)
Исправление для этой проблемы впервые выпущено в накопительном обновлении 3. Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления для SQL Server 2012 с пакетом обновления 1 (SP1), щелкните следующий номер статьи базы знаний Майкрософт:
2812412 Накопительный пакет обновления 3 для SQL Server 2012 с пакетом обновления 1 (SP1)Примечание. Поскольку сборки являются кумулятивными, каждый новый набор исправлений содержит все исправления и все исправления системы безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2012 с пакетом обновления 1 (SP1). Рекомендуется установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
2772858 Сборки SQL Server 2012, выпущенные после выпуска пакета обновления 1 (SP1) для SQL Server 2012
Накопительное обновление 5 для SQL Server 2008 R2 SP2
Исправление для этой проблемы впервые выпущено в накопительном обновлении 5. Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2 SP 2, щелкните следующий номер статьи базы знаний Майкрософт:
2797460 Накопительный пакет обновления 5 для SQL Server 2008 R2 с пакетом обновления 2 (SP2)Примечание. Так как сборки являются кумулятивными, каждый новый набор исправлений содержит все исправления и все исправления системы безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2008 R2 с пакетом обновления 2 (SP2). Рекомендуется установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
2730301 Сборки SQL Server 2008 R2, выпущенные после выпуска SQL Server 2008 R2 с пакетом обновления 2 (SP2)
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".
Обходное решение
Для решения этой проблемы используйте инструкцию полного соединения слиянием вместо полного предложения Join . Например, вы можете изменить запрос, упомянутый в разделе "проблема", таким образом, чтобы запрос соответствовал следующему:
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
Дополнительная информация
Дополнительные сведения об использовании предложения перекрестного применения можно найти на веб-сайте Microsoft TechNet по следующему адресу:
Общие сведения об использовании предложения перекрестного применения