我有简单的SSIS包。我的源代码是sql命令,如下所示:
Select * from table1 where col in (select col from table2 where col3='VAL')
For VAL I created the variable. and for subquery I created one more variable.
Variable1=VAL
variable2=select col from table2 where col3=Variable1
所以我的来源如下:
Select * from table1 where col in (variable2)
当我运行包时,这不是替换。似乎是Variable2未正确加载。
请建议。
答案 0 :(得分:1)
首先,如果col是table1和table2之间的连接列,则可以重写查询,如下所示:
SELECT *
FROM dbo.Table1 T1
INNER JOIN dbo.Table2 T2
ON T1.Col = T2.Col
WHERE T2.Col3 = 'VAL'
我假设您在OLE DB源或ADO.NET源中使用此查询以使用SQL命令选项读取它。
因此,请将查询放在存储过程中,如下所示:
CREATE PROCEDURE dbo.GetData
(
@Param1 NVARCHAR(50)
)
AS
BEGIN
SET NOCOUNT ON;
SELECT T1.col
, T2.col3
FROM dbo.Table1 T1
INNER JOIN dbo.Table2 T2
ON T1.Col = T2.Col
WHERE T2.Col3 = @Param1
END
创建两个SSIS包变量来存储存储过程执行命令以及要传递的参数值。
在变量 StoredProcedure 的属性上,将属性 EvaluateAsExpression 设置为True
,并将 Expression 设置为{{1 }}
使用如下所示的变量"EXEC dbo.GetData '" + @[User::Parameter] + "'"
将其作为变量传递给OLE DB Source。只要变量Parameter中的值发生更改,存储过程执行命令就会相应更改。