【问题标题】:SSIS Ole DB Source as Stored procedure from linked server with parametersSSIS Ole DB Source 作为带有参数的链接服务器的存储过程
【发布时间】:2016-06-09 11:45:51
【问题描述】:

全部。

我正在使用来自链接服务器的存储过程。我想使用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 无法从动态查询中获取列数据。

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

谢谢。

问好,尤里。

【问题讨论】:

  • 为什么不直接连接到其他服务器?
  • 很遗憾,我不允许这样做。

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


【解决方案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 源中 - 将变量指定为 SQL 命令源并选择 [User::SQL_Query]
存储过程在所有情况下都必须返回相同格式的结果集。 SP 不返回结果集将使 DataSource 失败。

【讨论】:

  • 嗨,费尔迪普克斯。非常感谢您的回答。它是共同的。但是只有当我将变量@SESSION_ID 传递给现有会话的标识符时,我才能成功验证并保存 Ole DB 源块。如果这样的会话不存在 - 我收到错误 i.gyazo.com/5bbaf08a3884b8600439b6ea31212da1.png
  • 这很正常。在包装设计阶段,您需要验证所有组件;因此,OLE DB 源必须返回一些行来确定元数据。在运行时 null 结果将是可以的。
  • i.gyazo.com/7e076b41384c2e8003637618fa13c0b6.png 不幸的是它不起作用(
  • 通过更新调用存储过程以在任何情况下返回结果集来解决。有或没有记录。
  • 是的,你是对的 - SP 应该总是返回具有相同结构的结果集。
猜你喜欢
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多