На компьютере установлены компоненты MDAC 2.8 приложение получает неверное значение для столбца идентификаторов из базы данных SQL Server 2005

Переводы статьи Переводы статьи
Код статьи: 940569 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Проблема

Рассмотрим следующую ситуацию. Создать таблицу, которая имеет столбец идентификаторов в базе данных Microsoft SQL Server 2005. Настройка репликации слиянием для таблицы. Приложение использует объекты данных ActiveX (ADO) для вставки строки в таблице. Затем приложение извлекает вставленной строки. Тем не менее возвращается неверное значение для столбца идентификаторов.

Эта проблема возникает, когда компьютер, на котором работает приложение имеет один из следующих программ:
  • Windows Server 2003
  • Windows XP
  • Компоненты MDAC 2.8 (MDAC 2.8)
Эта проблема не возникает в базе данных Microsoft SQL Server 2000.

Причина

Процесс репликации создает триггеры insert в таблице. При вставке данных в таблице insert триггеры использования ФУНКЦИЯ @@ IDENTITY вместо переменной SCOPE_IDENTITY функция. Таким образом ФУНКЦИЯ @@ IDENTITY переменная может возвращать значение идентификатора, который находится не в текущей таблице.

Решение

Чтобы устранить эту проблему, установите исправление, описанное в следующей статье базы знаний Майкрософт:
статье 961451 ИСПРАВЛЕНИЕ: Появляется неверное значение запроса значение идентификатора, вставленное последним после вставки данных в таблицу, содержащую столбец идентификаторов в приложении, использующем объекты данных ActiveX с помощью клиентского курсора
Примечание Исправление, которое было описано в разделе «Решение» в более ранней версии этой статьи был заменен исправление, описанное в статье 961451.

Статус

Корпорация Майкрософт подтверждает, что это проблема в продуктах Microsoft, перечисленных в разделе «Относится к».

Дополнительная информация

В SCOPE_IDENTITY функция и ФУНКЦИЯ @@ IDENTITY Переменная возвращают последние значения идентификатора, созданные в любой таблице в текущем сеансе. Тем не менее SCOPE_IDENTITY функция возвращает значения, которые вставляются только в пределах текущей области. В ФУНКЦИЯ @@ IDENTITY Переменная курсора к конкретной области не ограничивается.

Например предположим, что база данных содержит таблицы Table1 и Table2. Обеих таблицах есть столбцы идентификаторов. Триггер вставки, определенные в Table1. При вставке строки в Table1 триггер производит вставку копию строки в Table2. Этот сценарий включает следующие две области:
  • Вставка в таблицу Table1
  • Вставка в Table2 триггером
В этом случае ФУНКЦИЯ @@ IDENTITY переменная и SCOPE_IDENTITY функции возвращают различные значения при вставке строки в Table1. В ФУНКЦИЯ @@ IDENTITY Переменная возвращает последнее значение идентификатора столбца, будет вставлена в любой области в текущем сеансе. В этом случае ФУНКЦИЯ @@ IDENTITY Переменная возвращает значение идентификатора, которое вставляется в Table2. Тем не менее SCOPE_IDENTITY функция возвращает значение идентификатора, которое вставляется в таблицу Table1, так как SCOPE_IDENTITY функция возвращает значение последнего вставленный в той же области. В SCOPE_IDENTITY функция возвращает значение NULL, если функция вызывается до возникновения любых инструкций INSERT, которые вносятся в столбец идентификаторов в области действия.

Для получения дополнительных сведений о терминологии, обновление программного обеспечения щелкните следующий номер статьи базы знаний Майкрософт:
824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт

Свойства

Код статьи: 940569 - Последний отзыв: 19 июня 2011 г. - Revision: 6.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Web Edition
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard x64 Edition
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003, Datacenter x64 Edition
  • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional x64 Edition
Ключевые слова: 
kbautohotfix kbwinxppresp3fix kbexpertiseinter kbwinserv2003postsp2fix kbbug kbfix kbHotfixServer kbqfe kbmt KB940569 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:940569

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com