У меня есть база данных Access (в Access 2003) с несколькими таблицами, и данные должны быть импортированы в Sql Server 2005. Данные доступа не имеют такую же структуру, как база данных SQL Server, поэтому я создал различные запросы, которые преобразуют их в формат нужен для Sql Server. В основном для каждой таблицы в SQL Server у меня есть два запроса: запрос Select, который генерирует имена полей и типы, совместимые с таблицей sql, и запрос Append, который в основном выполняет
Insert into [Sql_table] (field1, field2, ...)
Select [field1, field2, ...] from [Access_table]
Как таблицы Sql, так и исходные таблицы доступа имеют первичный ключ Autoinc, и я включаю его в запрос.
Когда я запускаю запрос на вставку, а в запросе на выбор источника не очень много записей (до нескольких сотен), все работает нормально, записи вставляются нормально, с оригинальным идентификатором
Но когда в исходном запросе больше записей (у меня несколько таблиц с более чем 10000 записями), у меня две ситуации:
либо Access сообщает, что запрос не может добавить какие-либо записи на сервер sql из-за нарушения первичного ключа (но нарушения вообще нет). В этом случае я просто закрываю доступ и перезапускаю его ... и попадаю во вторую ситуацию
выполнение запроса Access сообщает, что не может импортировать x записей (обычно несколько, 10, 21, 32, обычно кажется случайным числом до 100 из 10000+) из-за нарушения первичного ключа, но импортирует остальное. Опять же, в любом случае нарушения ключа нет, все идентификаторы уникальны, как это было сгенерировано в исходной таблице Access с помощью поля autoinc. Странно то, что если я удаляю данные sql и снова запускаю запрос, я получаю различное количество не импортированных записей, иногда несколько, иногда больше, но все в диапазоне 10-50 из 10000
Я тоже пытался с Access 2007, но происходит то же самое.
Таблица сервера Sql имеет отношение внешнего ключа к главной таблице, но это отношение также удовлетворяется данными, которые я пытаюсь импортировать.
Кто-нибудь знает сталкивался с этой проблемой и знает решение?
Спасибо
PS: я не использую мастер импорта sql-сервера, поскольку будет много работы по преобразованию данных доступа через sql-сервер - запросы на выборку доступа уже выполнены, они довольно сложны, используют некоторые функции, написанные на VBA, который было бы трудно переписать в tsql только для этой цели