如何在SSIS包中设置变量?

时间:2014-12-24 02:57:04

标签: sql sql-server visual-studio ssis

我需要在我的SSIS包中使用两个变量,@extract_beg_date@extract_end_date

如何设置它们以某种方式运行?例如,在存储过程中,它看起来像这样:

SET @extract_beg_date = CASE WHEN DATEPART(weekday,GETDATE()) = '2'
                           THEN CAST(CONVERT(VARCHAR(10),GETDATE()-2,101) AS DATETIME)
                           ELSE CAST(CONVERT(VARCHAR(10),GETDATE()-1,101) AS DATETIME)
                        END

SET @extract_end_date = CAST(CONVERT(VARCHAR(10),GETDATE(),101) AS DATETIME)

如何在不使用存储过程的情况下在SSIS包中设置变量?我希望能够在SQL命令文本中使用它,如下所示:

SELECT *
FROM dbo.test_tbl
WHERE [TimeStamp] >= @extract_beg_date and [TimeStamp] < @extract_end_date

2 个答案:

答案 0 :(得分:2)

我会这样做:

  1. 在流程流程中,添加“执行SQL任务”。
  2. 打开执行SQL任务并将ResultSet属性配置为单行,并将SQLStatement属性配置为:

    选择 DATEPART时的情况(工作日,GETDATE())='2'     那么CAST(CONVERT(VARCHAR(10),GETDATE() - 2,101)AS DATETIME)     ELSE CAST(CONVERT(VARCHAR(10),GETDATE() - 1,101)AS DATETIME)END as extract_beg_date, CAST(CONVERT(VARCHAR(10),GETDATE(),101)AS DATETIME)AS extract_end_date

  3. Execute SQL Task

    1. 仍然在执行SQL任务中,转到结果集视图并添加两个结果输出。将Result name分别设置为0和1,并为extract_beg_date和extract_end_date创建2个变量。
    2. Result set

      1. 在执行期间,执行SQL任务将获取SELECT查询的输出,并将每个值保存到您创建的两个SSIS变量中。这些变量可用于后续步骤以参数化另一个查询。

答案 1 :(得分:0)

可以通过转到控制流并从菜单栏的SSIS菜单中选择它来打开“变量”窗格。您可以在此处创建变量并设置其类型。

您可以使用控制流中的脚本任务或数据流中的脚本组件来设置变量。为此,请将该变量添加到脚本编辑器中的ReadWriteVariables列表中,并按如下方式访问它:

控制流程:

Dts.Variables["VariableName"].Value = "hello";

数据流:

Variables.VariableName = "hello";

最后,将变量放入SQL语句中。我假设您在数据流开始时使用OLEDB连接来执行此操作。在OLE DB源代码编辑器中,将数据访问模式更改为SQL命令,并将问号标记为变量的占位符:

SELECT * FROM dbo.test_tbl WHERE [TimeStamp] >= ? and [TimeStamp] < ?

然后单击“参数”按钮并在下拉列表中选择变量,将它们分配给参数。

小心变量的范围。如果变量的范围限定为另一个数据流任务,则在执行选择时将无法看到它们。