2013-02-12 474 views
16

我正在尝试使用SQL Server导入和导出向导将数据从服务器中的一个数据库导入不同服务器中的新表。 (SQL Server Management Studio中2012)SQL Server导入和导出向导中的源类型200?

在向导,我查“编写一个查询来指定要传输的数据”,并包含以下四列的SQL语句返回数据:

+-----------------------------------------------------------------------------+ 
| ID(varchar(100)) | Title(text) | Description(text) | IsActive(tinyint)| 
+-----------------------------------------------------------------------------+ 

我想改变类型的新表

+----------------------------------------------------------------------------------------+ 
| ID(varchar(4)) | Title(varchar(200)) | Description(varchar(2000)) | IsActive(bit)| 
+----------------------------------------------------------------------------------------+ 

因此,在“列映射”页面(在“选择源表和视图”页面,我点击“编辑映射...”) ,我将Destination Type更改为上述类型。 然后,单击“下一步”,在“查看数据类型映射”页面后,我收到写着“Found 3 unknown column type conversion(s). You are only allowed to save the package

的数据类型映射显示以下信息的错误:

icon Source Column Source Type Destination Column Destination Type Convert 
---------------------------------------------------------------------------------- 
error ID    200   ID     varchar 
error Title   200   Title     varchar 
error Description  201   Description   varchar 
warning IsActive   tinyint  IsActive    bit  

即使我不更改“编辑映射...”页面中的数据类型,我得到相同的错误。

我不明白“200”在数据类型的上下文中的含义,以及如何将这些数据导入到不同服务器中的新表中?

我很感激任何帮助。

回答

4

我敢打赌,使用向导不能将文本列插入到varchar列中。根据表的大小,您可以通过SSMS将源导出到csv,然后导入它。这应该工作,但如果你有多个表导入你可以添加一个链接服务器。然后,你可以有资格旧表或新表是这样的:

insert into [new_server].database.dbo.tablename 
select * from old_table 

我知道SQL2000是一个用于创建链接的服务器痛苦,虽然这是我猜你正试图从,因为你有导出文本列。

+0

谢谢。我在想,如果使用向导导入或导入向导是不可能的,但这种解决方案的工作方式与向导一样简单: – kabichan 2013-02-12 17:04:29

+0

就像其他人遇到此问题一样,请确保您启用身份插入功能需要在导入的表中保留相同的PK'SET IDENTITY_INSERT DestinationTableName ON'。在您的查询结构如上所示之后,将其重新关闭。SET IDENTITY_INSERT DestinationTableName OFF' – Tommy 2014-01-26 17:47:43

13
+1

它适用于SQL Server 2008 R2管理ment Studio。他们在SQL Server 2012中引入了它,但仍然是一个问题。一个大错误的排序..不敢相信他们还没有解决它呢! – 2014-09-23 21:14:39

25

随着实验位这个错误似乎只当你有一个查询发生作为来源。接受的答案不适用于我,因为复制到平面文件会导致相同的错误。

为了解决这个问题,我把我的查询到View然后选择Copy From one or more Tables Or Views而不是Write a query...

我通过向导去正常后和(固定它除了微软)我的数据经历,并没有错误

+2

这是绝对正确的方式来解决这个丑陋的时间消耗微软的错误。你值得一杯啤酒先生 – Batu 2016-01-04 18:33:34

+0

保存我的屁股......谢谢 – kstubs 2016-01-27 14:31:50

+0

辉煌!有这个问题试图移动一些数据的数据类型的文本......像一个魅力工作!谢谢@shoe – Eli 2016-06-09 14:41:40

5

一个长期的解决方案(或有他们了吗?) 也是几个环节深从答案已发布。

在受影响的机器上,有一个xml文件,它为每个转换类型定义了一个代码到值的映射。
看到什么与“200”&“201”导致失败,是一个缺失的映射
....好吧,它不应该通过“200/201”,但正如它那样,我们希望它被映射

它可以手动插入,如果你愿意玩这样的配置。

这里就是我得到了答案,却很有办法了网页: http://social.msdn.microsoft.com/Forums/sqlserver/en-US/97ff1f01-c02a-4c9a-b867-8eaecc464cfb/2012-sp1-no-longer-recognizes-common-data-types?forum=sqlintegrationservices

的映射文件是在 C:\ Program Files文件(x86)的\ Microsoft SQL Server的\ 110个\ DTS \ MappingFiles \
(或等效)

每种类型的源到目标转换都有一个。

对于SQL Server之间去,看看那些如
MSSQLToSSIS10.XML
MSSql9ToMSSql8.xml
MSSql10ToMSSql9.xml

如果您看到

<!-- varchar --> 
<dtm:DataTypeMapping > 
    <dtm:SourceDataType> 
     <dtm:DataTypeName>varchar</dtm:DataTypeName> 
    </dtm:SourceDataType> 
    <dtm:DestinationDataType> 
     <dtm:CharacterStringType> 
      <dtm:DataTypeName>DT_STR</dtm:DataTypeName> 
      <dtm:UseSourceLength/> 
     </dtm:CharacterStringType> 
    </dtm:DestinationDataType> 
</dtm:DataTypeMapping> 

添加了 “200” 映射匹配,以便最终与

<!-- varchar --> 
<dtm:DataTypeMapping > 
    <dtm:SourceDataType> 
     <dtm:DataTypeName>varchar</dtm:DataTypeName> 
    </dtm:SourceDataType> 
    <dtm:DestinationDataType> 
     <dtm:CharacterStringType> 
      <dtm:DataTypeName>DT_STR</dtm:DataTypeName> 
      <dtm:UseSourceLength/> 
     </dtm:CharacterStringType> 
    </dtm:DestinationDataType> 
</dtm:DataTypeMapping> 
<dtm:DataTypeMapping > 
    <dtm:SourceDataType> 
     <dtm:DataTypeName>200</dtm:DataTypeName> 
    </dtm:SourceDataType> 
    <dtm:DestinationDataType> 
     <dtm:CharacterStringType> 
      <dtm:DataTypeName>DT_STR</dtm:DataTypeName> 
      <dtm:UseSourceLength/> 
     </dtm:CharacterStringType> 
    </dtm:DestinationDataType> 
</dtm:DataTypeMapping> 

以相同的方式修复nvarchar和其他任何其他问题!

3

我能够通过在SQL中将字符字段转换为char(##)并将目标数据类型更改为varchar(##)来解决此问题。这些字段在使用前可能需要修剪,但导入工作正常。

0

最快的解决方案是使用导入/导出向导将数据导出到同一数据库(源)中的新表。然后从新表中导出数据。 不知何故,导入/导出向导在创建新表格时发挥了他的魔力(不是真的)。 谢谢Jyoti结束使用导入/导出向导的痛苦。

1

你真的不需要做任何摆弄config,views或任何东西。只需保存SSIS包并通过在资源管理器中双击执行即可。这将启动“执行包实用工具(DTExecUI.exe在ManagementStudio文件夹中)应该没有错误运行包。

相关问题