0

我正在使用 SSIS 将 SalesForce 数据导入 SQL Server。在 SF 中,我有包含诸如“Live/Not Live”之类的值的 ntext 文件,这些值可以通过 SQL Server 中的位文件轻松解释。

有没有办法使用 SSIS 将这些 ntext 字段转换为布尔值。我尝试使用派生列转换并得到以下错误:

[插入目标 [807]] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。
发生 OLE DB 错误。错误代码:0x80040E21。OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80040E21 描述:“多步 OLE DB 操作产生错误。检查每个 OLE DB 状态值(如果可用)。没有完成任何工作。”。

[插入目标 [807]] 错误:SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。“输入“OLE DB 目标输入”(820)”失败,因为发生错误代码 0xC020907B,并且“输入“OLE DB 目标输入”(820)”上的错误行处理指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

[SSIS.Pipeline] 错误:SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。处理输入“OLE DB 目标输入”(820) 时,组件“插入目标”(807) 上的 ProcessInput 方法失败,错误代码为 0xC0209029。

已识别的组件从 ProcessInput 方法返回错误。该错误是特定于组件的,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

任何帮助将不胜感激。

4

1 回答 1

2

NTEXT 是您的 unicode 文本流。你不能对流做很多事情,所以我们需要把它变成更易于管理的东西,比如 DT_STR 或 DT_WSTR。您的文本数据是否具有国际化只有您自己知道。无论哪种方式,将数据转换转换连接到您的 SF 源,并使该数据成为非流类型(给它一个最大宽度)。此操作的目标是获取流数据并将其转换为纯文本值(Live,Not Live)。我假设此列将被调用IsLiveString

现在您正在处理字符串类型,请将派生列转换添加到转换输出,这里您需要一个表达式来确定数据转换任务提供的值是否计算为真/假。即使 SQL Server 理解Live转换为 1(真),我也没有办法永远依赖这种魔法。相反,我希望创建一个新列 IsLiveBoolean 并且它的表达式类似于([IsLiveString]=="Live") ? True : FalseThat expression isapproximate,我没有坐在 SSDT/BIDS 的实例中。它也可以通过消除代替相等检查的三元表达式来简化。如果您需要处理 IsLiveString 列中的 NULL 值,则三元运算符语法使评估更容易。

编辑

一张图片值一千字,所以考虑一下这个 3k 和一些变化。这代表数据流中的操作。我使用了一个简单的查询来 POC 您的示例。我生成了一个数据类型为 ntext 的列,其值为“Live”和“Not Live”以及一个 NULL。从源头上,我使用如上所述的数据转换任务。我与 DT_WSTR 一起使这个答案适用于尽可能广泛的受众,并将长度保留为默认值 50。为了优化内存使用,您希望减少长度以匹配源系统中最长的可能值。

数据流

我因此配置了我的派生列转换。有用于处理 NULL 的选项,或者如果您知道您的数据是 NULL 免费的,那么第一个将起作用。

派生列变换

结果。您可以观察到这正确地将字符串转换为相应的布尔对应项。然后这些将通过管道传输到您的目标组件中。

在此处输入图像描述

于 2012-12-04T00:53:13.687 回答