问题定义:
我们无法将文件夹中多个Excel工作表中的数据加载到SQL Server上的单个SQL数据库表中。我已经使用了forloop容器来检索多个文件和多个平面文件连接管理器。在多平面文件源组件处引发该错误。由于失败,无法理解它试图对数据进行的转换。
下面提到的错误代码:
[Flat File Source [61]] Error: Data conversion failed. The data conversion for column ""OriginalHireDate"" returned status value 2 and status text "The value could not be converted because of a potential loss of data.".
[Flat File Source [61]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "Flat File Source.Outputs[Flat File Source Output].Columns["OriginalHireDate"]" failed because error code 0xC0209084 occurred, and the error row disposition on "Flat File Source.Outputs[Flat File Source Output].Columns["OriginalHireDate"]" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure.
[Flat File Source [61]] Error: An error occurred while processing file "F:\CCHC\ADP\Incremental_ADP\ADP_PayData_Final1032020.csv" on data row 4209.
[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on Flat File Source returned error code 0xC0202092. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing. There may be error messages posted before this with more information about the failure.
到目前为止进行了哪些疑难解答:
我在多平面文件连接管理器上更改了页面代码,并尝试运行ETL,但失败。实际上,如果我将页面代码保留为65001,则它正在加载数据,但是在4209行,由于正在获取合并的列数据,因此它正在合并列。我还创建了一个新程序包,以使用平面文件源将单个文件数据的ETL运行到SQL表中,但是即使失败了。无法了解由于失败而试图对数据进行何种转换。使用平面文件源将所有创建的新目标组件重新映射到所有列,但是执行仍然失败。我们尝试更改尺寸以获取较长的输入。
有人可以帮我解决这个问题吗?
提前感谢。
解决方案1:检查数据类型:
我们根据使用的源数据类型更改了目标组件的数据类型
显示高级编辑器->输入输出属性-> OLE DB目标输入
现在通过单击(+)展开OLE DB目标输入,并检查右侧属性窗口中的数据类型,并对“外部列”和“内部列”中的每一列进行此操作。在我的情况下,日期列是Unicode字符串[DT_WSTR]。
解决方案2:多个平面文件连接管理器编辑器
有关更多详细信息,请参考Microsoft文档:https://docs.microsoft.com/en-us/sql/integration-services/connection-manager/multiple-flat-files-connection-manager?view=sql-server-ver15
我已经使用了文本限定符“:指定要使用的文本限定符。例如,您可以指定用引号将文本引起来。
如果您遇到文本限定符问题,请参阅链接:
使用SSIS中的文本限定符消除CSV文件中的双引号https://www.tutorialgateway.org/text-qualifier-in-ssis/
检查标题行定界符:
我用过逗号{,}
代码页:
我已使用65001 UTF-8
描述-行用逗号分隔。
解决方案3:代码页
代码页需要进行两项设置:
多个平面文件连接管理器编辑器
我已使用65001 UTF-8
描述-行用逗号分隔。
DFT中的OLE DB目标组件属性
右键单击OLE DB目标->属性
为AlwaysUseDefaultCodePage设置为True。
现在将DefaultCodePage设置为65001,与您在多个平面文件源中使用的相同连接管理器编辑器。
还要检查UsesDespositions是否设置为true。
希望此解决方案可以帮助所有人解决与该错误有关的问题。祝你好运!