SSIS Ole DB 源作为带有参数的链接服务器的存储过程

SSIS Ole DB Source as Stored procedure from linked server with parameters

所有。

我正在使用来自链接服务器的存储过程。我想在ole db源中使用程序。

我编写了在 SSIS 中有效的查询。

select ID,

LAST_NAME_ENG,

LAST_NAME_G,

FST_NAME_ENG,

FST_NAME_G,

BIRTHDATE

from openquery (linkedserver, 
'exec [linkedserver].get_records @SESSION_ID = 12 , @SYSTEM = ''oCRM'', @ENTITY_NAME = ''CLIENT''

 WITH RESULT SETS (([ID] [int] NOT NULL,

[LAST_NAME_ENG] [varchar](50) NOT NULL,

[LAST_NAME_G] [varchar](50) NOT NULL,

[FST_NAME_ENG] [varchar](50) NOT NULL,

[FST_NAME_G] [varchar](50) NOT NULL,

[BIRTHDATE] [date] NOT NULL))');

我可以在 SSIS ole db 源中使用它并成功获取所需数据。但是下一步就出现了问题:

我需要将参数从 SSIS 传递给 @SESSION_ID 而不是 '12'。而且我找不到正确的方法。

有很多建议使用动态 sql 并使用所需的参数值构建完整的查询字符串然后执行它,但如果我愿意这样做 - SSIS 无法从动态查询中获取列数据.

有什么办法可以解决吗? 任何想法都会有所帮助。

谢谢。

问候,Yuriy。

创建一个字符串变量,例如,SQL_Query。在变量定义中 - 设置 EvaluateAsExpression 并将表达式定义为 "your SQL statement ... @SESSION_ID = " + [User::Session_ID_Variable] + " rest of SQL statement",其中 Session_ID_Variable 包含您的条件值。如果 Session_ID_Variable 不是字符串 - 您必须使用 (DT_WSTR, length) 将其转换为字符串。 SQL_Query 中的结果将是您的目标 SQL 表达式。
然后在 OLE DB 源中 - 将变量指定为 SQL 命令源和 select [User::SQL_Query].
在所有情况下,存储过程必须 return 相同格式的结果集。 SP return 没有结果集将使 DataSource 失败。