【问题标题】:Compare column1 (Optionset) to set value in column2 (Lookup) in SSIS比较 column1(选项集)与 SSIS 中 column2(查找)中的设置值
【发布时间】:2021-01-08 15:15:36
【问题描述】:

我有一个问题,我想根据选项集中的值在帐户中设置一个查找:

(DT_GUID)(industrycode == 100000009 ? (DT_STR,50,1252)"280f1c20-ad3b-eb11-c345-000d3a23cdb4" 
: (industrycode == 100000003 ? (DT_STR,50,1252)"23cc76d9-d345-eb11-a813-000d3a23cdb4" 
: (DT_STR,50,1252)"00000000-0000-0000-0000-000000000000")) 

[错误信息]

[派生列转换编辑器]

如您所见,我想在“集群”列中写入,但我正在比较“IndustryCode”是否具有选项集值。现在它向我显示了此错误消息。我还尝试将它转换为 (DT_WSTR)、(DT_STR) 和 (DT_STR,50,1252)

【问题讨论】:

  • 您介意提供错误消息的英文翻译吗?簇列的数据类型是什么? (双击从源到派生列转换的行并查看“属性”选项卡)
  • @billinkc 这是我对错误的英文翻译:imgur.com/a/vukz0gs
  • @billinkc 还检查了该行的属性,我只能看到“常规”、“元数据”和“数据查看器”,但它们似乎都没有错。它还显示,accountid 和 ****cluster 是 DT_GUID。

标签: sql-server ssis migration dynamics-crm ssms


【解决方案1】:

我今天学到了两个新的 SSIS 知识。我创建了一个复制并得到了同样的错误

错误:数据流任务中的 0xC0049064,派生列 [2]:尝试执行类型转换时出错。

错误:数据流任务中的 0xC0209029,派生列 [2]:SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “派生列”失败,因为发生错误代码 0xC0049064,并且“派生列.输出 [派生列输出].列 [GuidCastError]”上的错误行处置指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

错误:数据流任务中的 0xC0047022,SSIS.Pipeline:SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。在处理输入“派生列输入”(3) 时,组件“派生列”(2) 上的 ProcessInput 方法失败,错误代码为 0xC0209029。已识别的组件从 ProcessInput 方法返回错误。该错误是特定于组件的,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

次要的是,我无法创建 DT_GUID 类型的变量,即使它是有效的数据类型。

但我知道他们将 GUID 用于包 ID 和执行 ID 等内容,因此我打开了“变量”窗口并检查了“显示系统范围的变量”,因为我知道他们在那里有 GUID。我观察到ExecutionInstanceGUID 的类型是String 他们列出的值是{0908C691-9E2A-4D42-8111-A7D98DE17BD9}。这些大括号最终成为解决问题的意外关键。

重写和简化你的表达方式

(DT_GUID)(industrycode == 100000009 ? "{280f1c20-ad3b-eb11-c345-000d3a23cdb4}" : (industrycode == 100000003) ? "{23cc76d9-d345-eb11-a813-000d3a23cdb4}" : "{00000000-0000-0000-0000-000000000000}")

我使用查询作为测试源

select newid() AS cluster
, D.*
FROM
(

SELECT 100000009 AS industrycode, 'case1' AS accountid
UNION ALL
SELECT 100000003 AS industrycode, 'case2' AS accountid
UNION ALL
SELECT 100000000 AS industrycode, 'case3' AS accountid
) D

您表示 accountid 是一个 guid,但为了我的测试,我想要文本,以便我可以观察它。

如果您还有其他情况,我建议您跳过派生列转换并使用查找任务。像这样写下你的查询

SELECT *
FROM
(
VALUES
(100000009, cast('280f1c20-ad3b-eb11-c345-000d3a23cdb4' AS uniqueidentifier))
,(100000003, cast('23cc76d9-d345-eb11-a813-000d3a23cdb44' AS uniqueidentifier))
)D(industrycode, cluster)

我会将其配置为忽略查找失败。如果您使用我的源查询运行它,您将看到未处理全零 guid 的“其他”情况。

通过在之后添加一个使用类似表达式的派生列来解决该问题

IsNull(cluster_lkp)? (DT_GUID) "{00000000-0000-0000-0000-000000000000}" : cluster_lkp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多