Сквозные запросы и запросы связанных таблиц с использованием разных соединений - PullRequest
1 голос
/ 09 августа 2011

Продолжение более раннего вопроса: Принудительный ввод SET IDENTITY_INSERT для более быстрого вступления в силу с MS Access

Я нахожусь в процессе сокращения с MSДоступ к бэкенду SQL Server.Многие из таблиц имеют первичные ключи автонумерации.Я пытаюсь заполнить их следующим образом (псевдокод):

ExecutePassThru "SET IDENTITY_INSERT dbo.Accounts ON"
db.Execute "INSERT INTO sql_Accounts SELECT * FROM mdb_Accounts"
ExecutePassThru "SET IDENTITY_INSERT dbo.Accounts OFF"

В приведенном выше коде sql_Accounts является связанной таблицей, связанной с таблицей Accounts в SQL Server, а mdb_Accounts является связанной таблицейподключен к таблице счетов в mdb.Это происходит с ошибкой,

Невозможно вставить явное значение для столбца идентификаторов в таблице «Учетные записи», если для параметра IDENTITY_INSERT установлено значение OFF.

Я запустил SQL Server Profiler дляпопытайтесь выяснить проблему, и проблема в том, что каждая строка кода в моем примере может использовать или не использовать разные идентификаторы процессов сервера (SPID).Другими словами, они используют разные соединения с бэкэндом.

Есть ли какой-нибудь способ убедиться, что все они используют одно и то же соединение?

1 Ответ

1 голос
/ 10 августа 2011

Может быть более элегантное решение, однако это однократное преобразование, и не стоит слишком много погружаться в попытки сделать сложные вещи с повторным использованием соединения.

  1. Создание промежуточной таблицы в SQLСервер, который не содержит удостоверения, но в остальном имеет ту же схему.
  2. Загрузка данных в эту таблицу
  3. Полностью вставьте удостоверение на стороне SQL Server.
...