SQL Server导入和导出向导中的源类型200?

时间:2013-02-12 00:40:01

标签: sql-server type-conversion ssms-2012

我正在尝试使用SQL Server导入和导出向导将数据从服务器中的一个数据库导入到另一个服务器中的新表。 (SQL Server Management Studio 2012)

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

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

我想将新表的类型更改为

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

因此,在“列映射”页面中(在“选择源表和视图”页面中,我点击了“编辑映射...”), I将目的地类型更改为上述类型。 然后,在单击“下一步”后,在“查看数据类型映射”页面中,出现“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”在数据类型的上下文中意味着什么,以及如何将此数据导入到不同服务器中的新表中?

我感谢任何帮助。

8 个答案:

答案 0 :(得分:29)

通过一些实验,只有在您将查询作为源时,才会出现此错误。接受的答案对我不起作用,因为复制到平面文件会导致相同的错误。

要解决此问题,我将查询放入View,然后选择Copy From one or more Tables Or Views而不是Write a query...

之后我正常通过向导,我的数据没有错误

答案 1 :(得分:13)

答案 2 :(得分:5)

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

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

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

答案 3 :(得分:5)

长期解决方案(除了微软修复它)(还是他们已经?) 也是发布的答案中的一些链接。

在受影响的计算机上,有一个xml文件,用于定义每种转换类型的代码到值的映射 用“200”和“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和其他任何内容!

答案 4 :(得分:3)

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

答案 5 :(得分:2)

这是bug,只是修复了SQL SERVER 2012 SP2

答案 6 :(得分:1)

你真的不需要做任何摆弄配置,观点等等。只需保存SSIS包并在资源管理器中双击它即可执行它。这将启动&#34;执行包实用程序(ManagementStudio文件夹中的DTExecUI.exe),该实用程序应该运行包而不会出错。

答案 7 :(得分:0)

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