2011-05-19 1407 views
3

我正试图将大型Access .mdb数据库导出到SQL Server数据库,并且已经遇到Microsoft DTS无法识别的问题访问数据库中特定类型字段的数据类型。将Access数据库转换为SQL Microsoft DTS - 数据类型'130'不在映射文件中

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

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

,我得到了完全相同的错误,其实像以前一样使我相信,编辑等映射文件不会有所作为。

任何任何想法?

+0

这是一个需要编写脚本的一次性操作还是什么?如果是一次性导入,请考虑SQL Server迁移助理for Access,它是迄今为止从Jet/ACE升级到SQL Server的最通用的工具。 – 2011-05-22 00:25:42

回答

3

您现在可能会遇到更大更好的错误消息,但在尝试使用导入向导将.mdb导入SQL 2008 R2时遇到了同样的问题。在mdb文件中设置为文本的几个字段正在抛出“在映射文件中未找到源数据类型130”错误。我将其追踪到mdb文件中的文本字段长度。任何设置为小于30的文本字段都会抛出错误。在mdb文件中,我将所有文本字段的字段大小增加到至少30,然后我能够导入数据库。希望这可以帮助!

  • 珍妮特
+0

这正是我的问题所在。感谢您的回应! – TGuimond 2011-07-16 13:07:20

+0

我也有'源数据类型130没有在映射文件中发现'错误,但所有的列都是字段长度50.我将它们更改为51并且问题解决 – TFischer 2014-06-04 14:19:29

+0

伟大的工作@Janet Laugel。我改变了任何将错误提交给访问中的长文本的字段,它工作。 – 2015-11-22 22:08:28

2

你需要编辑3个文件:

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

复制任何类型的文字和重新设定了130个来源和目标位置的来源。对我来说很完美。

7

为了详细说明这一点,如果你选择去了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将协助在访问在MSSQL中为nvarchar数据类型映射这些 “短文本” 字段。我觉得他们实际上是在内部存储为NChar的,但对于大多数目的来说,可变解决方案可能没问题。 JetToSSIS.xml然后将数据类型映射为宽字符串,就像您期望的那样。随着这些文件的更新,SSIS向导会正常处理这些列。

+0

有关此特定问题的更多信息,请访问:http://support.microsoft.com/kb/2152728(SSIS 2008导入导出向导可以显示数字而不是数据类型)。 – Josien 2012-07-01 13:27:21

1

对我来说,130问题的答案并不是30或更多的字段长度 - 这是事实上,您在Access 2003或更高版本中更改字段长度。 (我把它改为100,留下一些长度为50的单独 - 这些仍然错误130 - 所以我将它们全部更改为100) 我认为我的问题源自复制Access 97数据库中的几个表。 我有数百个领域,其中给了,即使他们可能已经16

0

有这个问题的字段的长度没有问题,其他表,具有类型10(DAO 3.6文本)和属性

  1. 属性应为
  2. 请参阅使用DAO 3.6的字段的属性。类型130是指 ADO。

何塞·罗伯托 巴西

相关问题