将2个表中的数据合并为一个

时间:2016-08-17 11:34:50

标签: sql sql-server ssis data-conversion dts

我有Employees和Non Employees表(正在从视图中导入数据)。

现在,我需要创建一个包含Employee和Non Employee数据的表。我无法从这里进步。

当我使用导入导出任务尝试时,我收到此错误:

DataMappingError

  • 执行(错误)
      

    消息   •错误0xc02020c5:数据流任务1:将列“单元号”(44)转换为列“单元号”(101)时数据转换失败。转换返回状态值2和状态文本“由于潜在的数据丢失,无法转换该值。”。   (SQL Server导入和导出向导)   •错误0xc0209029:数据流任务1:SSIS错误代码DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “数据转换0 - 0.Outputs [数据转换输出] .Columns [单元号]”失败,因为错误代码0xC020907F发生,错误行处置“数据转换0 - 0.Outputs [数据转换输出] .Columns [单元号]“指定出错时失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。   (SQL Server导入和导出向导)   错误0xc0047022:数据流任务1:SSIS错误代码DTS_E_PROCESSINPUTFAILED。组件“数据转换0 - 0”(85)上的ProcessInput方法在处理输入“数据转换输入”(86)时失败,错误代码为0xC0209029。标识的组件从ProcessInput方法返回错误。该错误特定于组件,但错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。   (SQL Server导入和导出向导)

4 个答案:

答案 0 :(得分:2)

首先通过脚本创建一个包含所需列的新表。

CREATE TABLE dbo.Employees (
     COLUMN_A   TYPE,
     COLUMN_B   VARCHAR(100)
);

在此之后,选择旧桌子做了一个插入。

INSERT INTO dbo.Employees ( COLUMN_A, COLUMN_B )
   SELECT COLUMN_A, COLUMN_B FROM TABLE1 UNION ALL
   SELECT COLUMN_A, COLUMN_B FROM TABLE2;

并创建一个索引,以提高最常查询列的性能。

答案 1 :(得分:1)

在查看详细信息后,似乎“单元号”列具有不同的数据类型。 要解决这个问题,要么使表的数据类型相同,要么创建一个具有高数据类型然后是现有数据类型的新表(意味着如果你的表有小int,小int),那么公用表将具有smallint数据类型。 / p>

答案 2 :(得分:1)

当varbinary类型的行插入varchar或任何其他数据类型时,会导致隐式转换问题。首先确定哪个列被定义为varbinary并使用强制转换为cast(column_name为varchar(100)),问题将得到解决。

答案 3 :(得分:1)

为什么使用“导出导出”向导?

如果您的表和视图位于同一个数据库中,您可以执行以下操作:

arescale.m

如果使用导入导出任务,请确保源和目标数据类型和长度匹配(如果目标列长度小于源,则可能发生char / varchar / nchar / nvarchar截断)。