Корпорация Майкрософт распространяет исправления Microsoft SQL Server 2008 в виде одного загружаемого файла. Поскольку исправления являются накопительными, каждый новый выпуск содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправления SQL Server 2008.
Проблема
Рассмотрим следующий сценарий.
- У вас есть запрос, в котором используется функция ROW_NUMBER вместе с левым внешним соединением в Microsoft SQL Server 2008.
- Вы создаете инструкцию SELECT, которая использует запрос как подчиненный запрос и возвращает уникальные строки с помощью ключевого слова DISTINCT.
- Вы запускаете эту инструкцию SELECT.
В этом случае вы можете получить неправильный результат. Левое внешнее соединение неправильно игнорируется.
Примечание. Дополнительные сведения о том, как воспроизвести эту проблему, см. в подразделе "Действия по воспроизведению этой проблемы" в разделе "Дополнительные сведения".
Решение
Сведения о накопительном пакете обновления
SQL Server 2008 R2
Исправление для этой проблемы впервые выпущено в накопительном пакете обновления 6. Для получения дополнительной информации о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2, откройте статью со следующим номером в базе знаний Майкрософт:
Накопительный пакет обновления 6 2489376 для SQL Server 2008 R2 Примечание Поскольку сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправления SQL Server 2008 R2. Рекомендуется рассмотреть возможность применения последнего выпуска исправления, содержащего это исправление. Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:
981356 Сборки SQL Server 2008 R2, выпущенные после выпуска SQL Server 2008 R2
SQL Server 2008 с пакетом обновления 1 (SP1)
Исправление для этой проблемы было впервые выпущено в накопительном пакете обновления 11 для SQL Server 2008 с пакетом обновления 1.
Дополнительные сведения об этом накопительном пакете обновления см. в следующей статье базы знаний Майкрософт:
2413738 Накопительный пакет обновления 11 для SQL Server 2008 с пакетом обновления 1Примечание Поскольку сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправления SQL Server 2008 г. Корпорация Майкрософт рекомендует рассмотреть возможность применения последнего выпуска исправления, содержащего это исправление. Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:
970365 Сборки SQL Server 2008 г., выпущенные после выпуска SQL Server 2008 с пакетом обновления 1 (SP1) Исправления для Microsoft SQL Server 2008 предназначены для определенных пакетов обновления SQL Server. Необходимо установить исправление для SQL Server 2008 с пакетом обновления 1 (SP1) для установки SQL Server 2008 с пакетом обновления 1. По умолчанию все исправления, предоставляемые в пакете обновления для SQL Server, входят в следующий пакет обновления для SQL Server.
SQL Server 2008 с пакетом обновления 2 (SP2)
Исправление для этой проблемы было впервые выпущено в накопительном пакете обновления 2 для SQL Server 2008 с пакетом обновления 2. Дополнительные сведения об этом накопительном пакете обновления см. в следующей статье базы знаний Майкрософт:
2467239 Накопительный пакет обновления 2 для SQL Server 2008 с пакетом обновления 2 (SP2) Так как сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправления SQL Server 2008 г. Корпорация Майкрософт рекомендует рассмотреть возможность применения последнего выпуска исправления, содержащего это исправление. Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:
2402659 Сборки SQL Server 2008 г., выпущенные после выпуска SQL Server 2008 с пакетом обновления 2 (SP2) Исправления для Microsoft SQL Server 2008 предназначены для определенных пакетов обновления для SQL Server. Необходимо применить исправление SQL Server 2008 с пакетом обновления 2 (SP2) для установки SQL Server 2008 с пакетом обновления 2. По умолчанию все исправления, предоставляемые в пакете обновления для SQL Server, входят в следующий пакет обновления для SQL Server.
Состояние
Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».
Дополнительные сведения
Действия по воспроизведению проблемы
Выполните следующие инструкции. Эти инструкции создают две таблицы, в которые вставляются некоторые данные.
create table A (a1 int) create table B (b1 int) insert into A values(1) insert into B values(1) insert into B values(1)Выполните следующую инструкцию. В этой инструкции функция ROW_NUMBER используется вместе с левым внешним соединением.
select a1, row_number() over (partition by a1 order by a1) as a3 from A left join B ON A.a1 = B.b1Выполните следующую инструкцию. В этой инструкции в качестве вложенного запроса используется запрос, выполненный на шаге 2.
select distinct a1, a3 from ( select a1, row_number() over (partition by a1 order by a1) as a3 from A left join B ON A.a1 = B.b1 ) as x
Примечание: при возникновении этой проблемы запрос на шаге 3 возвращает неверный результат.
Ссылки
Дополнительные сведения о функции ROW_NUMBER и внешних соединениях см. на следующих веб-сайтах сети Microsoft Developer Network (MSDN):
Дополнительные сведения о модели добавочного обслуживания для SQL Server см. в следующей статье базы знаний Майкрософт:
935897 Команда SQL Server предоставляет модель добавочного обслуживания для предоставления исправлений для обнаруженных проблем
Дополнительные сведения о схеме именования для обновлений SQL Server см. в следующей статье базы знаний Майкрософт:
822499 Новая схема именования пакетов обновления программного обеспечения Microsoft SQL Server Дополнительные сведения о терминологии обновления программного обеспечения см. в следующей статье базы знаний Майкрософт:
824684 Стандартные термины, используемые при описании обновлений программного обеспечения Майкрософт