Корпорация Майкрософт распространяет исправления 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, щелкните следующий номер статьи базы знаний Майкрософт:
2489376 Накопительный пакет обновления 6 для SQL Server 2008 R2 Примечание. Поскольку сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2008 R2. Рекомендуется установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
981356 Сборки SQL Server 2008 R2, выпущенные после выпуска SQL Server 2008 R2
SQL Server 2008 с пакетом обновления 1
Исправление для этой проблемы впервые выпущено в накопительном обновлении 11 для SQL Server 2008 с пакетом обновления 1 (SP1). Чтобы получить дополнительные сведения об этом накопительном пакете обновления, щелкните следующий номер статьи базы знаний Майкрософт:
2413738 Накопительный пакет обновления 11 для SQL Server 2008 с пакетом обновления 1 (SP1)Примечание. Так как сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2008. Корпорация Microsoft рекомендует установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
970365 Сборки SQL Server 2008, выпущенные после выпуска пакета обновления 1 (SP1) для SQL Server 2008 Исправления Microsoft SQL Server 2008 создаются для конкретных пакетов обновления для SQL Server. Вы должны применить исправление для SQL Server 2008 с пакетом обновления 1 (SP1) к установке SQL Server 2008 с пакетом обновления 1. По умолчанию любое исправление, предоставленное в пакете обновления SQL Server, входит в следующий пакет обновления для SQL Server.
SQL Server 2008 с пакетом обновления 2
Исправление для этой проблемы впервые выпущено в накопительном обновлении 2 для SQL Server 2008 с пакетом обновления 2. Чтобы получить дополнительные сведения об этом накопительном пакете обновления, щелкните следующий номер статьи базы знаний Майкрософт:
2467239 Накопительный пакет обновления 2 для SQL Server 2008 с пакетом обновления 2 (SP2)Примечание. Так как сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2008. Корпорация Microsoft рекомендует установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
2402659 Сборки SQL Server 2008, выпущенные после выпуска пакета обновления 2 (SP2) для SQL Server 2008 Исправления Microsoft SQL Server 2008 создаются для конкретных пакетов обновления для SQL Server. Необходимо применить исправление для SQL Server 2008 с пакетом обновления 2 (SP2) к установке SQL Server 2008 с пакетом обновления 2. По умолчанию любое исправление, предоставленное в пакете обновления SQL Server, входит в следующий пакет обновления для SQL Server.
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".
Дополнительная информация
Действия по воспроизведению этой проблемы
-
Выполните указанные ниже инструкции. Эти инструкции создают две таблицы и вставляют в них данные.
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 a3from Aleft join B ON A.a1 = B.b1
-
Выполните следующий оператор. Этот оператор использует запрос на этапе 2 в качестве подзапроса.
select distinct a1, a3from ( 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, предоставляет модель ISM для распространения исправлений обнаруженных проблемЧтобы получить дополнительные сведения о схеме присвоения имен обновлениям SQL Server, щелкните следующий номер статьи базы знаний Майкрософт:
822499Новая схема присвоения имен пакетам обновлений программного обеспечения Microsoft SQL ServerЧтобы получить дополнительные сведения о терминологии обновления программного обеспечения, щелкните следующий номер статьи базы знаний Майкрософт:
824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт