xml - 将 Access 数据库转换为 SQL Microsoft DTS - 数据类型 '130' 不在映射文件中

标签 xml database ms-access data-transfer dts

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

我查看了有问题的 Access 表,它们被设置为长度为 1 的“文本”。如果填充,它们包含单个 Y 或 N 值,但也可以有空值。

我一直在对包含此类字段的单个表进行测试。当我打开“编辑映射”屏幕时,数据类型设置为 -1,因此我手动将其设置为长度为 1 的 char 类型并尝试处理该表。这会产生以下错误消息:

[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>

事实上我遇到了与之前完全相同的错误,这让我相信编辑其他映射文件不会有什么不同。

有人有什么想法吗?

最佳答案

详细说明一下,如果您选择走 xml 路线,则 Access MSSQL 需要编辑的文件如下:

%ProgramFiles%\Microsoft SQL Server[你的版本]\DTS\MappingFiles\

将以下内容添加到 JetToMSSql8.xmlJetToMSSql9.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 向导将正常处理这些列。

关于xml - 将 Access 数据库转换为 SQL Microsoft DTS - 数据类型 '130' 不在映射文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6062100/

相关文章:

drupal - 将数据库模式移至 drupal

xml - 斯卡拉 XML : create a node not using literals

php - 通过 php domdocument 解析器获取文档元素的子元素

用于检查 INSERT 是否成功的 SQL 语法?

python - 无法将CSV文件数据导入mysql表

asp.net - 列出未使用的 ID

java - JAXB 中的 XML IDREF 返回错误的类?

xml - 使用 xpathSApply 在 R 中抓取 XML 属性

与 MS Access 相比,SQLite 非常慢

c# - 为什么用第一个读者 read() 运行第二个读者比在它自己的读者阅读上运行它运行得更快?