我需要在我的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
答案 0 :(得分: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
答案 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] < ?
然后单击“参数”按钮并在下拉列表中选择变量,将它们分配给参数。
小心变量的范围。如果变量的范围限定为另一个数据流任务,则在执行选择时将无法看到它们。