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

kab*_*han 17 sql-server type-conversion ssms-2012

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

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

+-----------------------------------------------------------------------------+
| ID(varchar(100))  |  Title(text)  |  Description(text)  |  IsActive(tinyint)|
+-----------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

我想将新表的类型更改为

+----------------------------------------------------------------------------------------+
| ID(varchar(4))  |  Title(varchar(200))  |  Description(varchar(2000))  |  IsActive(bit)|
+----------------------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

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

即使我没有在" 编辑映射... "页面中更改数据类型,我也会收到相同的错误.

我不明白"200"在数据类型的上下文中意味着什么,以及如何将此数据导入到不同服务器中的新表?

我感谢任何帮助.

Sho*_*hoe 30

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

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

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

  • 这是绕过这个丑陋时间消费微软bug的绝对正确方法.你值得喝啤酒先生 (2认同)

dar*_*rin 5

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

insert into [new_server].database.dbo.tablename
select * from old_table
Run Code Online (Sandbox Code Playgroud)

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


Mik*_*e M 5

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

在受影响的计算机上,有一个xml文件,用于为每种转换类型定义代码到值的映射.
在"200"和"201"导致失败的情况下看到的是一个缺失的映射
......好吧,它不应该是"200/201",但是就像它一样,我们希望它被映射

如果您愿意使用此类配置,可以手动插入.

这是我得到答案的地方,在页面上有很多方面:http: //social.msdn.microsoft.com/Forums/sqlserver/en-US/97ff1f01-c02a-4c9a-b867-8eaecc464cfb/2012-sp1-no -longer-识别常见数据类型?论坛= 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>
Run Code Online (Sandbox Code Playgroud)

添加"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>  
Run Code Online (Sandbox Code Playgroud)

以相同的方式修复nvarchar和其他任何内容!