TGu*_*ond 4 xml database ms-access dts data-transfer
我正在尝试将大型Access .mdb数据库导出到SQL Server数据库,并且一直遇到Microsoft DTS无法识别访问数据库中特定类型字段的数据类型的问题.
我查看了相关的访问表,并将它们设置为长度为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
Run Code Online (Sandbox Code Playgroud)
我一直在阅读各种博客,似乎我需要编辑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>
Run Code Online (Sandbox Code Playgroud)
事实上,我得到了与以前完全相同的错误,这让我相信编辑其他映射文件不会有所作为.
任何想法?
小智 8
要详细说明,如果选择转到xml路径,则需要编辑Access for 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>
Run Code Online (Sandbox Code Playgroud)
以及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>
Run Code Online (Sandbox Code Playgroud)
JetToMSSql*.xml将帮助将Access中的这些"短文本"字段映射到MSSQL中的nvarchar数据类型.我的印象是他们实际上是在内部存储为Access的NChar,但在大多数情况下,变量解决方案可能很好.然后JetToSSIS.xml将数据类型映射到宽字符串,正如您所期望的那样.随着这些文件的更新,SSIS向导将正常处理这些列.
小智 4
现在您可能已经看到了更大更好的错误消息,但我在尝试使用导入向导将 .mdb 导入 SQL 2008 R2 时遇到了同样的问题。mdb 文件中设置为文本的多个字段引发“在映射文件中找不到源数据类型 130”错误。我追踪到 mdb 文件中的文本字段长度。任何设置为小于 30 的文本字段都会引发错误。在 mdb 文件中,我将所有文本字段的字段大小增加到至少 30,然后就可以导入数据库了。