所有
我正在使用链接服务器的存储过程。我想在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。
答案 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失败。