【发布时间】:2019-07-29 22:18:21
【问题描述】:
如果我尝试使用 SSIS 将两个不不同的行插入到具有主键的表中,我如何确定将哪一行写入表中,哪一行由错误记录任务处理?
例如,我有一个包含两列和一个主键约束的目标表,我试图从源表中插入两行具有相同值但没有主键约束的行。
(KeyColumn UNIQUEIDENTIFIER NOT NULL, TextColumn VARCHAR(50) NULL)
如果我有两行具有相同的主键,尝试插入这两个行会使 SSIS 包崩溃,但如果我添加错误日志记录以记录重复的行,我有 1/2 的机会记录不正确的记录
| KeyColumn | TextColumn |
| 1 | 'ValidRecord' |
| 1 |'InvalidRecord'|
| 2 | 'ValidRecord' |
如果我可以始终如一地确定有效记录(例如:TextColumn 不应包含文本 'Invalid'),我如何创建一个 SSIS 任务以始终将正确的记录写入我的 SSIS 表并将不正确的记录发送到记录任务?
【问题讨论】:
-
在尝试插入记录之前验证源数据可以进入目标表。这将包括检测源中的重复键并检查源键是否已经在目标表中。是的,在插入过程中仍然需要处理错误,但验证源数据将使您在游戏中领先。
-
我发布这个的原因是如何处理异常。我在此处的简化示例中引用的这个主键实际上是源服务器中多个列的复合键;在源头上几乎不可能检测到。如果我可以验证源表中的数据,我会的。
标签: sql-server ssis etl sql-server-data-tools error-logging