【问题标题】:SSIS fill in Null Value with Non-Null ValueSSIS用非空值填充空值
【发布时间】:2018-02-07 14:43:20
【问题描述】:

在 SSIS 中运行脚本组件后,我目前能够从平面文件中获取这种类型的输出:

我的目标是用相同的序列号填写该列的其余部分,如下所示:

我尝试通过将其设置为变量并使用派生列来做到这一点,但是直到数据流之后才设置变量。此外,该脚本仅逐行读取,因此我看不到执行此简单任务的明显方法。

有没有办法在脚本中创建一个列并给它一个序列号的默认值?或者有没有办法使用 SQL 命令来更新列不为 Null 的 Null 值?

【问题讨论】:

  • 当然。您使用更新语句。更新 YourTable 设置 SerialNumber = SerialNumber 为 NULL 的任何位置。但是从您发布的内容来看,它们看起来不像 NULL,它们看起来像空字符串。
  • @SeanLange 使用 SSIS 和 ACE/JET 驱动程序时,空单元将作为 NULL 导入,而不是 ''。对于 OP,就个人而言,如果您可以在导入后定义数据的顺序,我会在您的临时表中执行此操作。这比执行脚本任务要容易得多。 更容易
  • 这是在我将其插入表格之前。这只是我的脚本能够从文本文件生成的输出。它们也是空白的,因为我在 Excel 中做了示例。
  • 看不到你的图片,但也许可以换一张桌子。导入表 1,使用序列号进行更新,然后使用此临时表作为源继续执行后续步骤。
  • 我可以用触发器做临时表。我唯一的问题是我有多个这样的文件,唯一标识符是序列号。所以我不能加入一个插入的伪表来确保我只更新我刚刚导入的值。

标签: sql sql-server ssis script-task


【解决方案1】:

您可以尝试此设计以执行您需要的操作(随意简化它,并使用您的输入数据进行测试):

  1. 阅读您的来源
  2. 多播
  3. 在您想要最大值的列上聚合 值(序列号)
  4. 创建具有常量值的派生列 (例如 1)
  5. 按常数值对集合进行排序
  6. 使用常量键将两个集合与完全连接合并
  7. 将数据导入目标表并使用新的聚合 列以填充序列号列

【讨论】:

    【解决方案2】:

    数据加载到表后的更新语句:

    update table set column = (select top 1 column from table where column is not null) where column is null
    

    【讨论】:

    • 我建议不要这样做。 OP 似乎暗示他们正在将数据加载到可能已经包含数据(或具有多个集合)的表中。执行此方法将 UPDATE every NULL 值与 random (您在使用 @987654325 的子查询中没有 ORDER BY @) 非*NULL* 同一列的值。这可能会使数据非常错误。
    • 这也是我害怕的。通常在我的触发器上,我使用 INSERTED 伪表确保我不会不小心弄乱好的数据。但是因为我的序列号没有在插入时填充,所以我真的不能这样做。
    猜你喜欢
    • 2021-10-15
    • 2021-09-05
    • 2015-07-22
    • 2017-07-19
    • 2016-06-28
    • 2022-11-20
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    相关资源
    最近更新 更多