SSIS MySQL ADO.net SQL 任务输入和输出

Posted

技术标签:

【中文标题】SSIS MySQL ADO.net SQL 任务输入和输出【英文标题】:SSIS MySQL ADO.net SQL Task Input & Output 【发布时间】:2022-01-23 18:58:49 【问题描述】:

我正在尝试使用 Visual Studio SSIS 中的 SQL 任务来获取存储到变量的两个输出值。

我已经对这个问题进行了一系列谷歌搜索,并且能够让插入工作,但我似乎看不到输出值。

我尝试过同时使用“?”和@NameVariables,但我运气不佳。

SELECT `LocalUnitCode`,`IBDAuditCode` 
FROM `tablename`.`provenance`
WHERE `DataCaptureTool` <> 'DataCaptureTool'
AND RIGHT(REVERSE(`IBDR_Source`),LENGTH(`IBDR_Source`)-LOCATE('_',REVERSE(`IBDR_Source`))) = ?;

SELECT `LocalUnitCode`,`IBDAuditCode` 
FROM `tablename`.`provenance`
WHERE `DataCaptureTool` <> 'DataCaptureTool'
AND RIGHT(REVERSE(`IBDR_Source`),LENGTH(`IBDR_Source`)-LOCATE('_',REVERSE(`IBDR_Source`))) = @Source;

SET @LocalUnitCode = 
(SELECT `LocalUnitCode` 
FROM `tablename`.`provenance`
WHERE `DataCaptureTool` <> 'DataCaptureTool'
AND RIGHT(REVERSE(`IBDR_Source`),LENGTH(`IBDR_Source`)-LOCATE('_',REVERSE(`IBDR_Source`))) = @Source);

不太确定是语法有问题还是参数映射或结果集需要更改。如果我尝试按照用于 SQL Server 的指南进行操作,它似乎无法正常运行。

任何正确方向的指针将不胜感激。

谢谢,

大卫

这是我在 SQL 语句中使用的代码:

SELECT ? = `LocalUnitCode`, ? = `IBDAuditCode` 
FROM `ibdr_staging_K`.`provenance`
WHERE `DataCaptureTool` <> 'DataCaptureTool'
AND RIGHT(REVERSE(`IBDR_Source`),LENGTH(`IBDR_Source`)-LOCATE('_',REVERSE(`IBDR_Source`))) = ?;

【问题讨论】:

错误信息是什么? 发布一些执行 SQL 任务的屏幕截图。主选项卡,参数和结果集,如果您愿意的话 这是我目前收到的错误消息:[执行 SQL 任务] 错误:执行查询“SELECT ? = LocalUnitCode, ? = IBDAuditCode FR...”失败并显示以下内容错误:“字符串 [1]:大小属性的大小为 0 无效。”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或者连接没有正确建立。 对于连接类型 ADO.NET,您应该使用 @parametername 映射到变量,您可以在“参数映射”选项卡中定义这些变量 【参考方案1】:

ADO.NET 中将变量映射到参数的示例:

SQL:

选择@LocalUnitCode = LocalUnitCode, @AuditCode = IBDAuditCode 来自ibdr_staging_K.provenance WHERE DataCaptureTool 'DataCaptureTool' AND RIGHT(REVERSE(IBDR_Source),LENGTH(IBDR_Source)-LOCATE('_',REVERSE(IBDR_Source))) = @Source;

【讨论】:

试过这个选项,我收到以下错误消息。 [执行 SQL 任务] 错误:执行查询“SELECT LocalUnitCode = LocalUnitCode, AuditCode ...”失败,出现以下错误:“String[1]:Size 属性的大小为 0。”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或者连接没有正确建立。 从错误 fyi 中删除了 @ 符号。我假设没有结果集,因为值正在传递给变量。 结果集 none 是正确的,因为它会输出到变量。您是否在 SSIS 变量中定义了变量 ETL_ ..?它们还应该与它们配对的列的数据类型相匹配。 是的,我在 SSIS 中定义了两个变量 1) ETL_ID_Provenance_AuditCode 2) ETL_ID_Provenance_LocalUnitCode 并且都设置为字符串 我已经更新了参数定义图片,包括输出参数的大小,我放了30但是你可以设置它来匹配列的长度。

以上是关于SSIS MySQL ADO.net SQL 任务输入和输出的主要内容,如果未能解决你的问题,请参考以下文章

SSIS 将 ADO Net 源聚合到 SQL Server 数据库中

在自定义 SSIS 任务中执行 SQL 的首选方式是啥?

将动态表传递给 SSIS 中的 ADO.NET 目标

使用脚本任务创建 ADO NET (ODBC) 数据流源

SSIS MySQL 复制表到 SQL Server

ssis