我正在使用SSIS将SalesForce数据导入SQL Server。在SF中,我有ntext文件,其中包含“Live / Not Live”等值,可以使用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状态值(如果可用)。没有 工作完成了。“。
[Insert Destination [807]]错误:SSIS错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “输入”OLE DB目标 输入“(820)”失败,因为发生错误代码0xC020907B,并且 “输入”上的错误行处置OLE DB目标输入“(820)” 指定错误失败。指定对象发生错误 指定组件的。可能会发布错误消息 在此之前,有关失败的更多信息。
[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PROCESSINPUTFAILED。该 组件“插入目标”(807)上的ProcessInput方法失败 处理输入“OLE DB Destination”时出现错误代码0xC0209029 输入“(820)。
标识的组件从ProcessInput方法返回错误。 该错误是特定于组件的,但错误是致命的并且会导致 数据流任务停止运行。可能会发布错误消息 在此之前,有关失败的更多信息。
非常感谢任何帮助。
答案 0 :(得分:2)
NTEXT是您的unicode文本流。你不能对流做很多事情,所以我们需要把它变成像DT_STR或DT_WSTR这样更易于管理的东西。无论您的文本数据是否具有国际化,您都会知道。无论哪种方式,将Data Conversion Transformation连接到您的SF源并将该数据转换为非流类型(给它一个最大宽度)。此操作的目标是获取流数据并将其转换为直接文本值(实时,非实时)。我假设此列将被称为IsLiveString
现在您正在处理字符串类型,将您的派生列转换添加到转换输出中,您需要一个表达式来确定数据转换任务中提供的值是否为True / False。即使SQL Server理解Live
转换为1(真),也没有办法让我依靠这种魔法永远工作。相反,我希望创建一个新列,IsLiveBoolean,它有一个像([IsLiveString]=="Live") ? True : False
这样的表达式。表达式是近似的,我不是一个SSDT / BIDS的实例。它也可以通过消除三元表达式代替等式检查来简化。如果您需要在IsLiveString列中处理NULL值,那么三元运算符语法可以使评估更容易。
一张图片胜过千言万语所以请考虑一下这个3k和一些变化。这表示数据流中的操作。我用一个简单的查询来POC你的例子。我生成一列数据类型为ntext的列,其值为“Live”和“Not Live”,为NULL。从源代码,我使用如上所述的数据转换任务。我使用DT_WSTR使此答案适用于最广泛的受众,并将长度保留为默认值50.为了优化内存使用,您需要减小长度以匹配源系统中可能的最长值。 / p>
我这样配置了Derived Column转换。有用于处理NULL的选项,或者如果你知道你的数据是空的,那么第一个就可以工作。
结果。您可以观察到这正确地使字符串成为相应的布尔对应物。然后将这些内容传送到您的目标组件。