gpt4 book ai didi

sql-server - 选择在 SSIS 错误记录任务期间写入哪些行

转载 作者:行者123 更新时间:2023-12-02 02:45:53 24 4
gpt4 key购买 nike

如果我尝试使用 SSIS 将两个非不同的行插入到一个具有主键的表中,我如何确定哪一行被写入该表以及哪一行由错误记录任务处理?

例如,我有一个包含两列和一个主键约束的目标表,我试图从源表中插入两行,它们具有相同的值但没有主键约束。

(KeyColumn UNIQUEIDENTIFIER NOT NULL, TextColumn VARCHAR(50) NULL)

如果我有两行具有相同的主键,尝试插入这两行会使 SSIS 包崩溃,但如果我添加错误日志记录来记录重复的行,我有 1/2 的机会记录不正确的记录

| KeyColumn  |   TextColumn  |
| 1 | 'ValidRecord' |
| 1 |'InvalidRecord'|
| 2 | 'ValidRecord' |

如果我可以始终如一地确定有效记录(例如:TextColumn 不应该包含文本 'Invalid' )我如何创建一个 SSIS 任务以始终编写正确的记录到我的 SSIS 表并将不正确的记录发送到日志记录任务?

最佳答案

您可以使用 2 种方法实现此目的:

(1) 使用脚本组件

如果您需要根据KeyColumn 进行重复检查(第一次出现有效其他无效),您可以使用脚本组件来实现。

  1. 首先,添加 1 个 DT_BOOL 类型的输出列(示例名称:Flag)
  2. 在脚本中使用类似的脚本:

    using System.Collections.Generic;

    public class ScriptMain:
    UserComponent

    {

    List<string> lstKey = new List<string>;

    public override void Input0_ProcessInputRow(InputBuffer0 Row)
    {

    if(!lstKey.Contains(Row.KeyColumn.ToString()){

    lstKey.Add(Row.KeyColumn.ToString());
    Row.Flag = true;

    }else{

    Row.Flag = false;

    }

    }

    }
  3. 添加条件拆分以根据 Flag 列值拆分行,使用类似的表达式:

    [Flag] == True
  4. True 路径映射到目标表,将 False 路径映射到错误记录目标

(2) 使用条件拆分

如果你可以根据文本列检查orw是否有效,那么你可以使用以下表达式添加条件拆分:

FINDSTRING([TextColumn],'InvalidRecord',1) == True

关于sql-server - 选择在 SSIS 错误记录任务期间写入哪些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55053783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com