日期:2014-05-17  浏览次数:20739 次

SQL2008数据导出出错!请各位帮忙瞧瞧,谢谢!
 正在初始化连接 (成功)

- 正在设置 SQL 命令 (成功)

- 正在设置源连接 (成功)

- 正在设置目标连接 (成功)

- 正在验证 (成功)

- 准备执行 (成功)

- 执行之前 (成功)

- 正在执行 (成功)

- 正在复制到 [dbo].[SF_ADClass] (错误)
消息
* 错误 0xc0202009: 数据流任务 1: SSIS 错误代码 DTS_E_OLEDBERROR。出现 OLE DB 错误。错误代码: 0x80004005。
已获得 OLE DB 记录。源:“Microsoft SQL Server Native Client 10.0” Hresult: 0x80004005 说明:“语句已终止。”。
已获得 OLE DB 记录。源:“Microsoft SQL Server Native Client 10.0” Hresult: 0x80004005 说明:“违反了 PRIMARY KEY 约束 'PK_SF_ADClass'。不能在对象 'dbo.SF_ADClass' 中插入重复键。”。
 (SQL Server 导入和导出向导)

* 错误 0xc0209029: 数据流任务 1: SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。“输入“Destination Input”(56)”失败,错误代码为 0xC020907B,而且针对“输入“Destination Input”(56)”的错误行处理设置指定一旦出错就失败。在指定组件的指定对象上出错。可能在此之前已经发出错误消息,提供了有关失败的详细信息。
 (SQL Server 导入和导出向导)

* 错误 0xc0047022: 数据流任务 1: SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。处理输入“Destination Input”(56)时,组件“目标 - SF_ADClass”(43)的 ProcessInput 方法失败,错误代码为 0xC0209029。标识的这个组件从 ProcessInput 方法返回了一个错误。虽然该错误是此组件特有的,但却是致命的,将导致数据流任务停止运行。可能在此之前已经发出错误消息,提供了有关失败的详细信息。
 (SQL Server 导入和导出向导)


- 执行之后 (成功)
消息
* 信息 0x402090df: 数据流任务 1: “组件“目标 - SF_ADClass”(43)”中的数据插入操作的最终提交已开始。
 (SQL Server 导入和导出向导)

* 信息 0x402090e0: 数据流任务 1: “组件“目标 - SF_ADClass”(43)”中的数据插入操作的最终提交已结束。
 (SQL Server 导入和导出向导)

* 信息 0x4004300b: 数据流任务 1: “组件“目标 - SF_ADClass”(43)”已写入 7 行。
 (SQL Server 导入和导出向导)



为什么会这样呢?

------解决方案--------------------
违反了 PRIMARY KEY 约束 'PK_SF_ADClass'。不能在对象 'dbo.SF_ADClass' 中插入重复键

这个重复有两个可能
1、原表就有重复,但是原表没有约束
2、虽然原表没有重复,但是目的表数据与原表数据有重复

------解决方案--------------------
请先使用语句
若是单一主键
select * from dbo.SF_ADClass as t1
where exists
(
select 1 from dbo.SF_ADClass AS t2
where t2.PKCol=t1.PKCol
group PKCol
    having COUNT(PKCol)>1
)
若是复合主键
select * from dbo.SF_ADClass as t1
where exists
(
select 1 from dbo.SF_ADClass AS t2
where  t2.PKCol1=t1.PKCol1 and t2.PKCol2=t1.PKCol2
    group PKCol1,PKCol12
    having COUNT(PKCol1+PKCol12)>1
)
找出重复的主键,干掉或update掉重复的部分
然后再导入就性。
导致原因正如3L所说