2016-06-09 401 views
0

全部。SSIS Ole数据库来源为链接服务器的存储过程,参数

我正在使用链接服务器的存储过程。我想在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而不是'12'将参数传递给@SESSION_ID。我找不到正确的方法来做到这一点。

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

有没有办法解决它? 任何想法都会有帮助。

谢谢。

对此,尤里。

+0

你为什么不直接连接到其他服务器? –

+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。

+0

嗨,Ferdipux。 非常感谢您的回答。它的作用是相同的。 但我只能在传递变量@SESSION_ID作为现有会话的标识符时才能成功验证并保存Ole DB Source块。如果此类会话不存在 - 我收到错误 https://i.gyazo.com/5bbaf08a3884b8600439b6ea31212da1.png –

+0

这很正常。在包装设计阶段,您需要验证所有组件;因此,OLE DB源必须返回一些行才能确定元数据。在运行时,null结果将会正常。 – Ferdipux

+0

https://i.gyazo.com/7e076b41384c2e8003637618fa13c0b6.png 不幸的是它不起作用( –

相关问题