如何使用SSIS将NTEXT值转换为BOOLEAN

时间:2012-12-04 00:02:25

标签: sql tsql ssis sql-server-2008-r2

我正在使用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方法返回错误。 该错误是特定于组件的,但错误是致命的并且会导致 数据流任务停止运行。可能会发布错误消息 在此之前,有关失败的更多信息。

非常感谢任何帮助。

1 个答案:

答案 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>

Data flow

我这样配置了Derived Column转换。有用于处理NULL的选项,或者如果你知道你的数据是空的,那么第一个就可以工作。

Derived column transformation

结果。您可以观察到这正确地使字符串成为相应的布尔对应物。然后将这些内容传送到您的目标组件。

enter image description here