Проблемы при импорте из базы данных Access на Sql Server через запросы Access - PullRequest
2 голосов
/ 19 марта 2010

У меня есть база данных 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 записями), у меня две ситуации:

  1. либо Access сообщает, что запрос не может добавить какие-либо записи на сервер sql из-за нарушения первичного ключа (но нарушения вообще нет). В этом случае я просто закрываю доступ и перезапускаю его ... и попадаю во вторую ситуацию

  2. выполнение запроса Access сообщает, что не может импортировать x записей (обычно несколько, 10, 21, 32, обычно кажется случайным числом до 100 из 10000+) из-за нарушения первичного ключа, но импортирует остальное. Опять же, в любом случае нарушения ключа нет, все идентификаторы уникальны, как это было сгенерировано в исходной таблице Access с помощью поля autoinc. Странно то, что если я удаляю данные sql и снова запускаю запрос, я получаю различное количество не импортированных записей, иногда несколько, иногда больше, но все в диапазоне 10-50 из 10000

Я тоже пытался с Access 2007, но происходит то же самое.

Таблица сервера Sql имеет отношение внешнего ключа к главной таблице, но это отношение также удовлетворяется данными, которые я пытаюсь импортировать.

Кто-нибудь знает сталкивался с этой проблемой и знает решение?

Спасибо

PS: я не использую мастер импорта sql-сервера, поскольку будет много работы по преобразованию данных доступа через sql-сервер - запросы на выборку доступа уже выполнены, они довольно сложны, используют некоторые функции, написанные на VBA, который было бы трудно переписать в tsql только для этой цели

Ответы [ 2 ]

3 голосов
/ 19 марта 2010

Это разовая сделка? Если так, то почему бы просто не использовать Access и экспортировать таблицы и данные на SQL-сервер, а затем заняться очисткой? Вот как я это делал в прошлом

немного информации

1 голос
/ 19 марта 2010

Я много раз сталкивался с такими вещами. Сообщения об ошибках доступа часто вводят в заблуждение. У меня нет прямого ответа для вас, но вот что я бы сделал ..

Создайте пустую таблицу, соответствующую структуре таблицы сервера назначения sql на сервере sql, но не накладывайте на нее никаких ограничений.

Затем скопируйте данные доступа в эту таблицу.

Теперь используйте Management Studio (или любой другой SQL-интерфейс, который вы используете) и сделайте вставку из поддельной таблицы в настоящую. Если это работает, то я не уверен, что тебе сказать. Если это не сработает, ваша управленческая студия должна вывести вам гораздо лучшее сообщение об ошибке, чтобы вы могли выяснить, в чем дело.

-Don

...