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

Поддержка Windows XP завершена

8 апреля 2014 г. корпорация Майкрософт прекратила поддержку Windows XP. Это повлияло на обновления программного обеспечения и параметры безопасности. Узнайте, что это значит для вас и какие меры по безопасности можно предпринять.

Поддержка Windows Server 2003 завершилась 14 июля 2015 г.

Корпорация Майкрософт завершила поддержку Windows Server 2003 14 июля 2015 г. Это повлияло на обновления программного обеспечения и параметры безопасности. Узнайте, что это значит для вас и какие меры по безопасности можно предпринять.

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:940569
Проблема
Рассмотрим следующую ситуацию. Создать таблицу, которая имеет столбец идентификаторов в базе данных 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 — последний просмотр: 06/19/2011 10:22:00 — редакция: 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
Отзывы и предложения