将访问数据库转换为 SQL Microsoft DTS - 数据类型"130"不在映射文件中



我正在尝试将大型 Access .mdb 数据库导出到 SQL Server 数据库,但遇到了 DTS 无法识别 Access 数据库中特定类型字段的数据类型的问题Microsoft。

我看了一下有问题的访问表,它们被设置为长度为 1 的"文本"。如果已填充,它们包含单个 Y 或 N 值,但也可以具有空值。

我一直在包含此类字段的单个表上进行测试。当我打开"编辑映射"屏幕时,数据类型设置为 -1,因此我手动将其设置为长度为 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 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>

我遇到与以前完全相同的错误这一事实使我相信编辑其他映射文件不会有什么不同。

有人有什么想法吗?

为了详细说明这一点,如果您选择使用 xml 路由,则需要编辑以访问 MSSQL 的文件如下所示:

%ProgramFiles%\Microsoft SQL Server[Your Version]\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 中的这些"短文本"字段映射到 MSSQL 中的 nvarchar 数据类型。 我的印象是它们实际上在内部存储为 NChar 在 Access 中,但在大多数情况下,可变解决方案可能没问题。 然后,JetToSSIS.xml如您所料将数据类型映射到宽字符串。 更新这些文件后,SSIS 向导将正常处理此类列。

您现在可能已经看到更大更好的错误消息,但是在尝试使用导入向导将.mdb导入 SQL 2008 R2 时,我遇到了同样的问题。 在 mdb 文件中设置为文本的几个字段引发"在映射文件中找不到源数据类型 130"错误。 我将其追踪到 mdb 文件中的文本字段长度。 任何设置为小于 30 的文本字段都会引发错误。 在 mdb 文件中,我将所有文本字段的字段大小增加到至少 30,然后我能够导入数据库。

我使用 SQL Server 导入和导出向导从 SSMS 导入数据并遇到了同样的问题。我尝试了@Avarkx解决方案,但没有成功。但后来我意识到SSMS本身有自己的JetToMSSql8.xml,JetToMSSql9JetToSSI.xml S版本.xml这些文件位于[SSMS_Install_Path]\Common7\IDE\CommonExtensions\Microsoft\SSIS[SQL Server版本号]\MappingFiles当我@Avarkx解决方案应用于这些文件时,它开始正常工作而没有错误。

对我来说,130 问题的答案不是关于 30 或更大的字段长度 - 而是您在 Access 2003 或更高版本中更改字段长度的事实。(我将我的更改为 100,仅留下一些长度为 50 的长度 - 这些继续错误 130 - 所以我将它们全部更改为 100)我认为我的问题源于从 Access 97 数据库中复制几个表。我在其他表中有数百个字段,即使它们的长度可能是 16 也没有问题

您需要编辑 3 个文件:

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

复制任何类型的文本并替换 130 和目标 ntext 的源。对我来说很完美。

有此问题的字段,具有类型 10(DAO 3.6 中的文本)和属性

  1. 该属性应为
  2. 使用 DAO 3.6 查看字段的属性。130型是指阿多。

最新更新