SSIS Ole DB Source作为来自链接服务器和参数的存储过程

时间:2016-06-09 11:45:51

标签: sql-server stored-procedures ssis linked-server openquery

所有

我正在使用链接服务器的存储过程。我想在ole db source中使用该过程。

我编写的查询在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。

1 个答案:

答案 0 :(得分:1)

创建一个字符串变量,比如 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 Source中 - 将变量指定为SQL命令源并选择 [User :: SQL_Query]
存储过程必须在所有情况下返回相同格式的结果集。返回没有结果集的SP将使DataSource失败。