2016-08-17 86 views
-2

我有雇员和非雇员表(正在从视图导入数据)。将来自2个表的数据合并为一个

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

我得到这个错误,当我尝试使用进出口任务:

DataMappingError

  • 执行(错误)

    Messages • Error 0xc02020c5: Data Flow Task 1: Data conversion failed while converting column "Unit Number" (44) to column "Unit Number" (101). The conversion returned status value 2 and status text "The value could not be converted because of a potential loss of data.". (SQL Server Import and Export Wizard) • Error 0xc0209029: Data Flow Task 1: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "Data Conversion 0 - 0.Outputs[Data Conversion Output].Columns[Unit Number]" failed because error code 0xC020907F occurred, and the error row disposition on "Data Conversion 0 - 0.Outputs[Data Conversion Output].Columns[Unit Number]" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure. (SQL Server Import and Export Wizard) Error 0xc0047022: Data Flow Task 1: SSIS Error Code DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component "Data Conversion 0 - 0" (85) failed with error code 0xC0209029 while processing input "Data Conversion Input" (86). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running. There may be error messages posted before this with more information about the failure. (SQL Server Import and Export Wizard)

回答

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; 

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

+0

以上查询是否会摆脱重复? –

+0

我ram上面查询并获取此错误:不允许从数据类型varchar(max)到varbinary(max)的隐式转换。使用CONVERT函数来运行此查询。 –

1

查看详细信息后,似乎“单元号”列有不同的数据类型。 为了克服这个问题,要么使数据类型与表中的数据类型相同,要么创建一个具有高数据类型的新表,然后存在一个(意思是如果你的表有小int,小int),那么公用表将具有数据类型smallint。

+0

所以在这种情况下我有Unit Number作为int和其他tablea varchar(1)。任何想法常见的表格数据类型应该是什么? –

+0

如果是这种情况,那么最好的办法是保持每个列为VARCHAR,并且一旦确认特定列具有特定的数据类型,然后在int,tinyint,smallint等中相应地更改。 –

1

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

+0

我尝试了CONVERT(varchar(MAX), PictureName,2)但它不工作:( –

+0

尝试cast(PictureName as varchar(max))。它应该工作 –

1

为什么你使用导入导出向导?

如果你的表和视图都在同一个数据库中,你可以做以下操作:

INSERT INTO TABLE 
SELECT COL1, COL2....FROM VIEW 

如果您使用的导入导出任务,确保源和目标的数据类型和长度匹配(用于CHAR/VARCHAR/NCHAR如果目标列长度小于源,则可能会发生/ nvarchar截断)。

+0

是的我有2个视图在同一个数据库中是否有可能从2个不同的视图插入数据到单个表使用以上查询? –

+0

是的,开发你的T-SQL首先结合你的视图,并遵循上面的语法 – p2k

+0

这样的工作!谢谢..但有一个问题:第一个表有varbinary图片名称,并在转换为varchar后,我看到ÿØÿà.. –

相关问题