В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

При использовании функции @@ IDENTITY и SCOPE_IDENTITY() может появиться неверные значения

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

Эта статья на английском языке:2019779
Проблема

При использовании функцииSCOPE_IDENTITY() или @@ IDENTITY для извлечения значениях, вставляемых в столбец идентификаторов можно заметить, что эти функции иногда возвращают неправильные значения. Проблема возникает только в том случае, когда запросы с помощью планов параллельного выполнения. Для получения дополнительных сведений о том, как определить, если запросы, будет использоваться параллельного выполнения планов обратитесь к разделу параллелизм внутри запроса в следующие технические статьи в корпорации Майкрософт:

Причина
Корпорация Майкрософт подтверждает, что это проблема в продуктах Microsoft, перечисленных в начале данной статьи.
Решение
В настоящее время нет никаких исправление, устраняющее эту проблему. Корпорация Майкрософт рекомендует не использовать любой из этих функций в запросах при использовании параллельных планов, они не всегда надежный. Вместо этого используйте предложениеOUTPUT инструкции INSERT для извлечения значения идентификаторов, как показано в следующем примере.

Пример использования предложения OUTPUT.

ОБЪЯВЛЕНИЕ таблицы @ MyNewIdentityValues (myidvalues int)
Объявление таблицы @ A (идентификатор типа int первичный ключ)
Вставьте значения @ A (1)
Объявление таблицы @ B (int identity(1,1) первичного ключа Идентификатора, int b не null)
Вставьте значения @ B (1)
Выберите
[Количество строк] = @@ RowCount,
[@@ IDENTITY] = @@ IDENTITY,
[SCOPE_IDENTITY] = SCOPE_IDENTITY()

SET statistics profile на
Вставка в _ddr_T
выходные данные вставлены.Идентификатор в @ MyNewIdentityValues
Выберите
b.ID
от @ A
left join @ B b на b.ID = 1
левое объединение @ B b2 на b2.B = -1

left join _ddr_T t на t.T = -1

где не существует (выберите * из _ddr_T t2 где t2.ID = -1)
SET statistics profile off

Выберите
[Количество строк] = @@ RowCount,
[@@ IDENTITY] = @@ IDENTITY,
[SCOPE_IDENTITY] = SCOPE_IDENTITY(),
[IDENT_CURRENT] = IDENT_CURRENT('_ddr_T')
Выберите * от @ MyNewIdentityValues
Перейти

Если ситуации требуется, необходимо использовать любой из этих функций, можно использовать один из следующих методов для обхода проблемы.

Метод 1:

Включить следующий параметр в запрос

OPTION (MAXDOP 1)

Примечание: это может привести к снижению производительности части запроса SELECT.

Способ 2:

Прочитать значение из части SELECT в набор переменных (или одной табличной переменной), а затем вставить в целевую таблицу с MAXDOP = 1. Так как не будет параллельного плана вставки вы получите право семантических еще ваш выбор будет параллельных требуемый уровень производительности.

Способ 3:

Выполните следующую инструкцию, чтобы установить параметрmax degree of parallelism 1:

sp_configure «max degree of parallelism», 1
Перейти
изменить параметры с помощью переопределения
Перейти

Примечание:Этот метод может вызвать снижение производительности на сервере. Этот метод не следует использовать, если только он оценен в тестирования, или промежуточной, среда.

Примечание. Это ЭКСПРЕСС-ПУБЛИКАЦИЯ, подготовленная непосредственно службой технической поддержки Майкрософт . Сведения, содержащиеся в данном документе, предоставлены в качестве отклика на возникшие проблемы. Из-за срочности в материалах могут быть опечатки, и в любое время и без уведомления в них могут быть внесены изменения. Чтобы получить дополнительные сведения, см. Условия использования.

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 2019779 — последний просмотр: 05/30/2011 05:09:00 — редакция: 8.0

Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Evaluation Edition, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2008 Web, Microsoft SQL Server 2008 Standard Edition for Small Business, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 R2 Web, Microsoft SQL Server 2005 Workgroup Edition, Microsoft SQL Server 2005 Enterprise X64 Edition

  • kbmt KB2019779 KbMtru
Отзывы и предложения