【问题标题】:Source Type 200 in SQL Server Import and Export Wizard?SQL Server 导入和导出向导中的源类型 200?
【发布时间】:2013-01-27 05:35:11
【问题描述】:

我正在尝试使用 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)|
+----------------------------------------------------------------------------------------+

所以,在“Column Mappings”页面(在“Select Source Tables and Views”页面,我点击了“Edit Mappings...”),我将目标类型更改为上述类型。 然后,单击“下一步”后,在“查看数据类型映射”页面中,出现“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”在数据类型上下文中的含义,以及如何将此数据导入不同服务器中的新表?

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 这是解决这个丑陋的耗时微软错误的绝对正确方法。先生,你应该喝啤酒
    • 太棒了!有这个问题试图移动一些具有文本数据类型的数据......就像一个魅力!谢谢@shoe
    【解决方案2】:

    【讨论】:

    • 它适用于 SQL Server 2008 R2 Management Studio。他们在 SQL Server 2012 中引入了它。但仍然是一个问题。有点像一个大错误......不敢相信他们还没有解决它!
    【解决方案3】:

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

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

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

    【讨论】:

    • 谢谢。我想知道是否无法使用向导导入,或者有办法使向导工作,但这个解决方案和向导一样简单:)
    • 作为对遇到此问题的其他人的参考,如果您需要在导入的表中保留相同的 PK,请确保启用身份插入。 SET IDENTITY_INSERT DestinationTableName ON。在您的查询结构如上之后,将其关闭。 SET IDENTITY_INSERT DestinationTableName OFF
    【解决方案4】:

    一个长期的解决方案(除了微软修复它)(或者他们已经有了?) 从发布的答案中也可以找到一些链接。

    在受影响的机器上,有一个 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 和任何其他字符!

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-03-05
              • 1970-01-01
              • 1970-01-01
              • 2018-09-26
              • 2010-12-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多