参数未在SSIS包中的运行时加载

时间:2011-09-14 08:56:58

标签: sql sql-server ssis

我有简单的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未正确加载。

请建议。

1 个答案:

答案 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包变量来存储存储过程执行命令以及要传递的参数值。

Variables

在变量 StoredProcedure 的属性上,将属性 EvaluateAsExpression 设置为True,并将 Expression 设置为{{1 }}

Expression

使用如下所示的变量"EXEC dbo.GetData '" + @[User::Parameter] + "'"将其作为变量传递给OLE DB Source。只要变量Parameter中的值发生更改,存储过程执行命令就会相应更改。

OLE DB