Конвертировать базу данных Access в SQL Microsoft DTS - тип данных «130» отсутствует в файле отображения - PullRequest
4 голосов
/ 19 мая 2011

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

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

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

[Source Information]
Source Location : C:\admin\facdata.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 Files\Microsoft SQL Server\100\DTS\MappingFiles\JetToSSIS.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 Files\Microsoft SQL Server\100\DTS\MappingFiles\MSSQLToSSIS10.XML
    [Conversion Steps]
    Conversion unknown ...
    SSIS conversion file: c:\Program Files\Microsoft SQL Server\100\DTS\binn\DtwTypeConversion.xml

Я читал различные блоги, и мне кажется, что мне нужно отредактировать файлы сопоставления xml, чтобы сообщить DTS, какой тип данных должен быть 130, поэтому я отредактировал файл c: \ Program Files \ Microsoft SQL Server \ 100 \ DTS \ MappingFiles \ JetToSSIS.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>

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

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

Ответы [ 5 ]

8 голосов
/ 09 декабря 2011

Чтобы уточнить это, если вы решите пойти по маршруту 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 поможет сопоставить эти поля «Короткий текст» в Доступе к типу данных nvarchar в MSSQL.У меня сложилось впечатление, что они на самом деле хранятся как NChar в Access внутри, но для большинства целей переменное решение, вероятно, подойдет.Затем JetToSSIS.xml отображает тип данных в широкую строку, как и следовало ожидать.После обновления этих файлов мастера служб SSIS будут нормально обрабатывать такие столбцы.

4 голосов
/ 15 июля 2011

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

  • Janet
2 голосов
/ 27 февраля 2012

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

2 голосов
/ 28 октября 2011

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

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

Копироватьлюбой тип текста и переименование источника для 130 и целевого ntext.Прекрасно работает для меня.

0 голосов
/ 03 июня 2012

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

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

Хосе Роберто Бразилия

...