Как я могу обойти проблемы с идентификацией при импорте данных Access в SQL Server

#sql-server-2008 #ms-access

#sql-server-2008 #ms-access

Вопрос:

Я выясняю, как перенести мои данные из базы данных Access в базу данных SQL Server (2008 R2 Express Edition). Я предполагал, что использование Task-> Import и загрузка данных таким образом было бы правильным решением, но я только что попал в точку.

Для данных в импортируемых мной таблицах установлены ключи автоинкрементирования, которые я должен поддерживать при загрузке данных. Это связано с тем, что существуют (не принудительные) ссылки на значения по внешнему ключу. Теперь я понял, что мне нужно создать таблицы в SQL Server с установленным параметром IDENTITY, а затем использовать SET IDENTITY_INSERT для ON для таблицы перед импортом. Эксперименты показывают, что скрипт (который я не вижу) завершается с ошибкой, если это требуется.

Я попробовал эксперимент по созданию do something вручную для отображения таблицы «Перспектива», первая попытка была

 SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Datasource="C:UsersAlanDocumentsdbbackend.mdb";Jet OLEDB:System Database="C:UsersAlanDocumentsdbSecured.mdw";User ID=Alan;Password=xxxxxx;')...Prospect;
  

но это не удалось из-за следующего

Поставщик OLE DB «Microsoft.Jet.OLEDB.4.0» для связанного сервера «(null)» вернул сообщение «Неопределенная ошибка». Сообщение 7303, уровень 16, состояние 1, строка 1 Не удается инициализировать объект источника данных поставщика OLE DB «Microsoft.Jet.OLEDB.4.0» для связанного сервера «(null)».

Найдя в Интернете инструкции, в которых говорилось, что это можно преодолеть с помощью другого драйвера, я наивно попытался

 SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0','Datasource="C:UsersAlanDocumentsdbbeckendn.mdb";Jet OLEDB:System Database="C:UsersAlanDocumentsdbSecured.mdw";User ID=Alan;Password=xxxxxx;')...Prospect; 
  

но это также не удалось с…

Поставщик OLE DB «Microsoft.ACE.OLEDB.12.0» для связанного сервера «(null)» вернул сообщение «Не удалось найти устанавливаемый ISAM». Сообщение 7303, уровень 16, состояние 1, строка 1 Не удается инициализировать объект источника данных поставщика OLE DB «Microsoft.ACE.OLEDB.12.0» для связанного сервера «(null)».

Кто-нибудь может сказать мне, что я делаю не так

[Примечание: При двойной проверке этого сообщения я попытался снова импортировать таблицу в новую базу данных, но не удалось скопировать запись. Похоже, что поле доступа типа Byte с ненулевым значением в нем (скопированная таблица содержит множество записей с нулем, но ни одна из ненулевых) к полю типа smallint вызвало ошибку переполнения]

Комментарии:

1. Установлен ли SQL Server на 32 или 64-разрядной ОС?

Ответ №1:

Попробуйте использовать бесплатный программный инструмент под названием помощник по миграции SQL Server от Microsoft:http://www.microsoft.com/downloads/en/details.aspx ?FamilyID= 5abe098d-c7e1-46c6-994a-09a2856eef0b amp;displaylang = ru

Комментарии:

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

2. Если это не импорт данных, у вас должны быть неисправленные ошибки в данных. Я нахожу SSMA очень хорошим инструментом, поскольку он позволяет вам имитировать импорт и выяснить, что идет не так, чтобы вы могли исправить все проблемы перед запуском реального импорта. Единственное место, где происходит сбой, которое я заметил, — это определенные правила проверки Access / Jet / ACE, которые легко редактируются в соответствии с форматом SQL Server.

3. Да, я нашел поле даты / времени с тем, что выглядело как поврежденное время в нем.

4. На самом деле я выбрал альтернативный путь, потому что я хочу как можно меньше думать, и я понимаю, что не совсем все нуждается в импорте напрямую (некоторые конфигурационные таблицы отличаются). Итак, я использую management Studio для создания пустой базы данных, а затем использую ее данные задачи / импорта для импорта в нее mdb-файла. Затем у меня есть две хранимые процедуры в основной базе данных, которые копируют данные и вставляют их (с включенным IDENTIY_INSERT). 10 минут для первого (ручного) этапа и 90 секунд для второго (автоматического) этапа