Перейти до основного
Підтримка
Вхід
Вхід за допомогою облікового запису Microsoft
Увійдіть або створіть обліковий запис.
Вітаємо,
Виберіть інший обліковий запис.
У вас є кілька облікових записів
Виберіть обліковий запис, за допомогою якого потрібно ввійти.

Ознаки

Розглянемо такий сценарій:

  • Ви вставляєте багато рядків у таблицю в Microsoft SQL Server 2008 або SQL Server 2008 R2, скориставшись одним із наведених нижче запитів.

    • INSERT INTO <target_table> SELECT * FROM <target_table> WHERE <predicate>
    • SELECT * INTO <target_table> FROM <source_table> WHERE <predicate>

    Примітки

    • Покажчик місця заповнення в <target_table> указує на фактичне ім'я цільової таблиці.

    • <предикат> покажчик місця заповнення представляє фактичний предикат.

    • Покажчик місця заповнення <source_table> – це реальна вихідна таблиця.

  • Перевищено граничне значення обмеження для ескалації таблиці.

У цьому сценарії Обробник баз даних не перемістить замки таблиці.

Причина

Ця проблема виникає через те, що SQL Server не використовує всі нові замки, створені за допомогою вставлення операцій. Тому, можливо, не буде викликано граничне значення обмеження для ескалації, коли це потрібно.

Спосіб вирішення

Відомості про пакет оновлень для SQL Server 2008

Щоб вирішити цю проблему, отримайте найновіший пакет оновлень для SQL Server 2008. щоб отримати докладні відомості, клацніть цей номер статті, щоб переглянути статтю в базі знань Microsoft Knowledge Base:

968382 Отримання найновішого пакета оновлень для SQL Server 2008

Відомості про пакет оновлень для SQL Server 2008 R2

Щоб вирішити цю проблему, отримайте найновіший пакет оновлень для SQL Server 2008 R2. Щоб отримати докладні відомості, клацніть цей номер статті, щоб переглянути статтю в базі знань Microsoft Knowledge Base:

2527041Отримання найновішого пакета оновлень для SQL Server 2008 R2

Стан

Корпорація Майкрософт підтвердила, що це проблема в продуктах Microsoft, перелічених у розділі "застосовується до".Цю проблему було спочатку виправлено в SQL Server 2008 Service Pack 2 для SQL Server 2008. цю проблему спочатку виправлено в SQL Server 2008 R2 Service Pack 1 для SQL Server 2008 R2.

Додаткові відомості

Щоб отримати докладні відомості про блокування ескалації, перейдіть на веб-сайт Microsoft TechNet:

Загальні відомості про блокування ескалаціїЩоб визначити, чи перезапущено замки таблиці, виконайте наведені нижче твердження Transact-SQL.

USE tempdbGOCREATE TABLE x (i INT NOT NULL PRIMARY KEY)GOBEGIN TRANINSERT xSELECT TOP (40000)ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rFROM master..spt_values a, master..spt_values bORDER BYrSELECTCOUNT(*)FROM sys.dm_tran_locksWHERE request_session_id = @@SPID ROLLBACKGODROP TABLE x 

Якщо ви переросли замки таблиці, останній оператор SELECT повертає значення 1 або 2. Якщо не переросли замки таблиці, останній оператор SELECT повертає значення 40 066 або 40 067.

Потрібна додаткова довідка?

Потрібні додаткові параметри?

Ознайомтеся з перевагами передплати, перегляньте навчальні курси, дізнайтесь, як захистити свій пристрій тощо.

Спільноти допомагають ставити запитання й відповідати на них, надавати відгуки та дізнаватися думки висококваліфікованих експертів.

Чи ця інформація була корисною?

Наскільки ви задоволені якістю мови?
Що вплинуло на ваші враження?
Натиснувши кнопку "Надіслати", ви надасте свій відгук для покращення продуктів і служб Microsoft. Ваш ІТ-адміністратор зможе збирати ці дані. Декларація про конфіденційність.

Дякуємо за відгук!

×