【问题标题】:VS 2005 SSIS Error value originVS 2005 SSIS 错误值来源
【发布时间】:2014-04-11 15:23:20
【问题描述】:

我在 vs 2005 中创建了一个 ssis 包,它开始给我以下错误:

[Lawson 暂存表 [4046]] 错误:输入“OLE DB 目标输入”(4059) 上的输入列“JOB_CODE”(4200) 存在错误。返回的列状态为:“违反的值 列的完整性约束。”。

我的第一个问题是:我的表、列和目标后面的 4046、4200 和 4059 值是什么?

我的第二个问题是关于完整性约束消息。目标表是一个没有约束的堆(没有键或索引)。目标列定义为 varchar(10)。输入列来自 oracle,定义为 char(9),称为 job_code。那么 - 在哪里定义了完整性约束?

最后一个问题是关于select语句的;如下所示:

Select ...
,lpad(trim(e.job_code),10,'0') as job_code ...

如果我取出 lpad 和 trim 函数,它可以工作,但我需要这些函数,因为我的规范要求使用前导零填充的固定长度列。此列在 TOAD 中按预期返回数据,但在 ssis 包中失败。有人看到函数的使用方式有问题吗?

由于这个包过去工作但突然开始抛出这个错误,我假设新的无效数据已经开始发挥作用。但是,最近添加的行似乎与历史记录没有任何不同。

【问题讨论】:

    标签: sql oracle ssis


    【解决方案1】:

    这些数字更有可能是分配给每个任务/表/列等的 ID。 您可能可以转到数据流任务的高级编辑器并查看输入和输出属性。您可以看到为每个输入或每个列分配了一个 ID。

    下一步:您遇到的错误通常发生在未选中“Allow Nulls”选项时。

        Try this:
        Look at the name of the column for this error/warning.
        Go to SSMS and find the table
        Allow Nulls for that Column
        Save the table
        Rerun the SSIS
    

    【讨论】:

    • 我确实检查了高级编辑器,但数字不匹配。
    • 设置目标 col 以允许空值工作 - 这是完整性约束。但是,原始列被定义为 JOB_CODE NOT NULL CHAR(9) 所以我仍然不确定空值是如何传递到目标列的。我使用 lpad 或 trim 功能的方式一定有问题。
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多