【发布时间】:2015-01-05 16:53:07
【问题描述】:
我正在尝试使用 SSIS 将选择信息从一个数据库复制到另一个数据库。我直接从 SSMS 中的旧表编写了新表,因此它们应该是相同的。它们被设置为 [Col1]、[Col2]、[Col3]、[Col4]、[Col5],具有 [Col1] 和 [Col2] 的聚类 PK。
我开始在 SSIS 中使用带有 select 语句的 OLEDB 源设置数据流任务
SELECT [Col1], [Col2], [Col3], [Col4], [Col5] FROM [DBO].[dbo].[table] WHERE [Col5] LIKE 'AB%'
然后是 SQL Server 目标。我不断收到主键约束错误,因此我将其更改为 OLEDB 源和文件目标以进行错误处理。 615911 行被写入数据库,另外 49970 行被写入文件。
我在被拒绝的行之间找不到任何共同点。它们都是唯一的,因为它们必须是唯一的,因为源表上的 PK 约束与目标表上的相同。我已经抽查过了,目标表中不存在任何内容,尽管当我尝试从错误输出文件复制到目标表时仍然出现 PK 错误。据我所知,目标表中不存在具有相同 [Col1] 或 [Col2] 的条目,尽管其他行确实有重复的 [Col1] 或 [Col2]。
有什么建议吗?
【问题讨论】:
-
您是否绝对肯定目标表上的 PK 在两列上,而不仅仅是其中一列?
-
再次检查两个表的架构是否相同。
-
修改你的目标表。删除主键。运行包。您的所有数据都应该加载。然后运行查询以查找重复项
SELECT D.Col1, D.Col2 FROM dbo.Table AS D GROUP BY D.Col1, D.Col2 HAVING COUNT(1) > 1;该查询是否产生任何结果?如果是这样,那么你有你的副本。如果没有,那么您的主键不是您指定的。 -
我检查了双重检查和三重检查模式是否相同。我知道目标表上的 PK 在两列上,因为我检查了,还因为 SSIS 给出了导致问题的第一个 PK 值并将两个列值都作为 PK 值。
-
致 billinkc:这样做我确实得到了大约 100 个重复的行。但是怎么做?它们不会在源中重复,只是在目标中。为什么它在设置 PK 时拒绝了 49k 行,但在我删除 PK 时只给了我 100 个重复项?每行的计数为 2。此外,具有重复项的表的行数与我试图带来的各个记录相匹配。这是怎么发生的?
标签: sql-server database ssis