Преобразовать базу данных Access в SQL Microsoft DTS — Тип данных ‘130’ отсутствует в файле сопоставления

#xml #database #ms-access #data-transfer #dts

#xml #База данных #ms-access #передача данных #dts

Вопрос:

Я пытаюсь экспортировать большую базу данных Access .mdb в базу данных SQL Server и столкнулся с проблемой, когда Microsoft DTS не распознает тип данных определенного типа поля в базе данных access.

Я взглянул на соответствующие таблицы access, и они настроены как «текст» длиной 1. Они содержат единственное значение Y или N, если они заполнены, но также могут иметь значение null.

Я тестировал на одной таблице, которая содержит поле этого типа. Когда я открываю экран «Редактировать сопоставление», тип данных устанавливается равным -1, поэтому я вручную устанавливаю для него тип char длиной 1 и пытаюсь обработать таблицу. При этом выдается следующее сообщение об ошибке:

 [Source Information]
Source Location : C:adminfacdata.mdb
Source Provider : Microsoft.Jet.OLEDB.4.0
Table: `ACASSCATDEPREC`
Column: DepBook
Column Type: 130
SSIS Type: (Type unknown ...)
Mapping file (to SSIS type): c:Program FilesMicrosoft SQL Server100DTSMappingFilesJetToSSIS.xml

    [Destination Information]
    Destination Location : SERVERNAME
    Destination Provider : SQLOLEDB
    Table: [dbo].[ACASSCATDEPREC]
    Column: DepBook
    Column Type: char
    SSIS Type: string [DT_STR]
    Mapping file (to SSIS type): c:Program FilesMicrosoft SQL Server100DTSMappingFilesMSSQLToSSIS10.XML
    [Conversion Steps]
    Conversion unknown ...
    SSIS conversion file: c:Program FilesMicrosoft SQL Server100DTSbinnDtwTypeConversion.xml
  

Я читал различные блоги, и кажется, что мне нужно отредактировать файлы сопоставления xml, чтобы указать DTS, какой тип данных 130 должен быть, поэтому я отредактировал файлc:Program Файлы Microsoft SQL Server100DTSMappingFilesJetToSSIS.xml и запустил его снова, но это не имело никакого значения.

Я добавил это в файл сопоставления xml, а затем перезапустил программу и повторил попытку:

 <dtm:DataTypeMapping >
    <dtm:SourceDataType>
        <dtm:DataTypeName>Char</dtm:DataTypeName>
    </dtm:SourceDataType>
    <dtm:DestinationDataType>
        <dtm:CharacterStringType>
            <dtm:DataTypeName>130</dtm:DataTypeName>
            <dtm:Length>1</dtm:Length>
        </dtm:CharacterStringType>
    </dtm:DestinationDataType>
</dtm:DataTypeMapping>
  

Тот факт, что я получил точно такую же ошибку, как и раньше, заставил меня поверить, что редактирование других файлов сопоставления ничего не изменит.

У кого-нибудь есть идеи?

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

1. Это одноразовая операция или что-то, что должно быть доступно сценарию? Если это одноразовый импорт, рассмотрите помощник по миграции SQL Server для Access, который на сегодняшний день является наиболее универсальным инструментом для изменения размера с Jet / ACE на SQL Server.

Ответ №1:

Чтобы уточнить это, если вы решите пойти по маршруту xml, файлы, которые вам нужно будет отредактировать для доступа к MSSQL, следующие:

%ProgramFiles%Microsoft SQL Server [Ваша версия] DTS MappingFiles

Добавьте следующее в JetToMSSql8.xml и JetToMSSql9.xml

 <!-- 130 -->
<dtm:DataTypeMapping >
    <dtm:SourceDataType>
        <dtm:DataTypeName>130</dtm:DataTypeName>
    </dtm:SourceDataType>
    <dtm:DestinationDataType>
        <dtm:CharacterStringType>
            <dtm:DataTypeName>nvarchar</dtm:DataTypeName>
            <dtm:UseSourceLength/>
        </dtm:CharacterStringType>
    </dtm:DestinationDataType>
</dtm:DataTypeMapping>
  

И в JetToSSIS.xml

 <!-- 130 -->
<dtm:DataTypeMapping >
    <dtm:SourceDataType>
        <dtm:DataTypeName>130</dtm:DataTypeName>
    </dtm:SourceDataType>
    <dtm:DestinationDataType>
        <dtm:CharacterStringType>
            <dtm:DataTypeName>DT_WSTR</dtm:DataTypeName>
            <dtm:UseSourceLength/>
        </dtm:CharacterStringType>
    </dtm:DestinationDataType>
</dtm:DataTypeMapping>
  

JetToMSSql *.xml поможет сопоставить эти поля «короткого текста» в Access с типом данных nvarchar в MSSQL. У меня сложилось впечатление, что на самом деле они хранятся как NChar внутри Access, но для большинства целей решение с переменной, вероятно, подойдет. The JetToSSIS.xml затем тип данных преобразуется в широкую строку, как и следовало ожидать. После обновления этих файлов мастера SSIS будут обрабатывать такие столбцы в обычном режиме.

Ответ №2:

Возможно, к настоящему времени вы получили более крупные и качественные сообщения об ошибках, но я столкнулся с той же проблемой при попытке импортировать .mdb в SQL 2008 R2 с помощью мастера импорта. Несколько полей, которые были настроены как текст в файле mdb, выдавали ошибку «тип исходных данных 130 не найден в файле сопоставления». Я отследил длину текстового поля в файле mdb. Любое текстовое поле, размер которого был установлен меньше 30, выдавало ошибку. В файле mdb я увеличил размер всех текстовых полей как минимум до 30, а затем я смог импортировать базу данных.

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

1. Именно в этом и заключалась моя проблема. Спасибо за ответ!

2. У меня также была Source data type 130 was not found in the mapping file ошибка, но все столбцы имели длину поля 50. Я изменил их на 51, и проблема была решена

3. Отличная работа @Janet Laugel. Я изменил любое поле, которое выдает ошибку, на длинный текст в access, и это сработало.

Ответ №3:

Ответ на проблему 130 для меня заключался не в длине поля 30 или более — это тот факт, что вы ИЗМЕНЯЕТЕ длину поля в Access 2003 или выше. (Я изменил свой на 100, оставив только некоторые с длиной 50 — они продолжали выдавать ошибку 130 — поэтому я изменил их все на 100) Я думаю, что моя проблема возникла из-за копирования пары таблиц из базы данных Access 97. У меня есть сотни полей в других таблицах, которые не вызывали проблем, даже если они могли иметь длину 16

Ответ №4:

Я импортировал данные с помощью мастера импорта и экспорта SQL Server из SSMS и столкнулся с той же проблемой. Я попробовал решение @Avarkx, но безуспешно. Но потом я понял, что у самой SSMS есть свои собственные версии JetToMSSql8.xml , JetToMSSql9.xml и JetToSSIS.xml файлы, которые расположены в [SSMS_Install_Path] Common7 IDE CommonExtensions Microsoft SSIS [Номер версии SQL Server] MappingFiles Когда я применил решение @Avarkx к этим файлам, оно начало работать без ошибок.

Ответ №5:

Вам нужно отредактировать 3 файла:

  • IBMDB2ToSSIS10.xml
  • JetToSSIS.xml
  • DtwTypeConversion.xml

Скопируйте любой тип текста и замените исходный текст на 130 и конечный ntext. Для меня работает идеально.

Ответ №6:

Поле, в котором возникает эта проблема, имеет тип 10 (текст в DAO 3.6) и атрибут

  1. Атрибут должен быть
  2. Смотрите свойства полей в DAO 3.6. Тип 130 относится к ADO.