我正在尝试将大型 Access .mdb 数据库导出到 SQL Server 数据库,但遇到了 Microsoft DTS 无法识别 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 to 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 中的这些“短文本”字段映射到 MSSQL 中的 nvarchar 数据类型。我的印象是它们实际上在 Access 内部存储为 NChar,但对于大多数用途来说,变量解决方案可能没问题。然后,JetToSSIS.xml 将数据类型映射为宽字符串,正如您所期望的那样。更新这些文件后,SSIS 向导将正常处理此类列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)