18

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

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

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

我想将新表的类型更改为

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

因此,在“列映射”页面(在“选择源表和视图”页面中,我单击了“编辑映射...”),我将目标类型更改为上述类型。然后,单击“下一步”后,在“查看数据类型映射”页面中,出现“ 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

8 回答 8

30

通过一些实验,此错误似乎仅在您将查询作为源时才会发生。接受的答案对我不起作用,因为复制到平面文件会导致同样的错误。

为了解决这个问题,我将我的查询放入一个Viewthen selectedCopy From one or more Tables Or Views而不是Write a query....

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

于 2013-09-27T16:08:43.357 回答
14

不幸的是,这是一个BUG。请参阅(并投票)下面的链接:

--> SQL Server 导入导出向导无法识别 Varchar 和 NVarchar

-->当源是查询时,SQL 2012 SP1 中的 DTSWizard 不再识别 nvarchar/varchar 数据类型

于 2013-05-16T07:26:21.540 回答
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 和任何其他人!

于 2014-03-06T23:13:03.590 回答
5

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

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

我知道 SQL2000 对创建链接服务器来说是一件痛苦的事情,尽管我猜你正试图从中导出,因为你有文本列。

于 2013-02-12T03:15:53.003 回答
3

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

于 2014-03-18T19:46:50.827 回答
2

这是错误,刚刚在SQL SERVER 2012 SP2中修复。

于 2014-07-15T17:58:25.583 回答
1

你真的不需要对配置、视图或其他东西做任何摆弄。只需保存 SSIS 包并通过在资源管理器中双击它来执行它。这将启动“执行包实用程序(ManagementStudio 文件夹中的 DTExecUI.exe),它应该运行包而不会出错。

于 2014-06-18T08:25:38.113 回答
0

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

于 2014-03-26T04:20:20.910 回答