Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在SSIS包中设置变量?_Sql_Sql Server_Visual Studio_Ssis - Fatal编程技术网

Sql 如何在SSIS包中设置变量?

Sql 如何在SSIS包中设置变量?,sql,sql-server,visual-studio,ssis,Sql,Sql Server,Visual Studio,Ssis,我需要在SSIS包中使用两个变量,@extract\u beg\u date和@extract\u end\u date 我该如何设置他们的行为方式?例如,在存储过程中,它将如下所示: SET @extract_beg_date = CASE WHEN DATEPART(weekday,GETDATE()) = '2' THEN CAST(CONVERT(VARCHAR(10),GETDATE()-2,101) AS DATETIME)

我需要在SSIS包中使用两个变量,
@extract\u beg\u date
@extract\u end\u 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
选择*
来自dbo.test\u tbl
其中[TimeStamp]>=@extract\u beg\u date和[TimeStamp]<@extract\u end\u date

通过转到控制流并从菜单栏的SSIS菜单中选择它,可以打开变量窗格。在这里可以创建变量并设置其类型

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

控制流:

Dts.Variables["VariableName"].Value = "hello";
数据流:

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

从dbo.test\u tbl中选择*其中[TimeStamp]>=?和[时间戳]<?

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


注意变量的范围。如果变量的作用域是另一个数据流任务,则在执行选择时将无法看到它们。

我将按如下方式执行此操作:

  • 在流程流上,添加执行SQL任务
  • 打开执行SQL任务并将ResultSet属性配置为单行,将SQLStatement属性配置为:

    挑选 DATEPART(工作日,GETDATE())为'2'时的大小写 然后强制转换(将(VARCHAR(10),GETDATE()-2101)转换为DATETIME) ELSE CAST(将(VARCHAR(10),GETDATE()-1101)转换为DATETIME)结束为extract\u beg\u date, 强制转换(将(VARCHAR(10),GETDATE(),101)转换为DATETIME)作为提取\结束\日期

  • 仍然在执行SQL任务中,转到结果集视图并添加两个结果输出。将结果名称分别设置为0和1,并为extract_beg_date和extract_end_date创建2个变量
  • 在执行期间,“执行SQL”任务将获取SELECT查询的输出,并将每个值保存到您创建的两个SSIS变量中。这些变量可在后续步骤中用于参数化另一个查询

  • 创建这两个变量时,是否将其设置为字符串类型或日期时间类型?我正在尝试从“设置值”选项卡设置变量值以执行SSIS包。有没有办法从这里查看可用变量。