Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 Server和SSIS中创建“运行ID”_Sql_Sql Server_Ssis_Etl_Derived Column - Fatal编程技术网

如何在SQL Server和SSIS中创建“运行ID”

如何在SQL Server和SSIS中创建“运行ID”,sql,sql-server,ssis,etl,derived-column,Sql,Sql Server,Ssis,Etl,Derived Column,我有一份定期运行的报告,并将其放入临时数据库中进行审查。它通过转换数据的SSIS进行处理;但是,我想添加一个运行ID,它将在每次运行趋势报告时以整数形式递增,但到目前为止,我还不知道如何做到这一点 目标不是为每一行分配一个新的编号,而是为一次运行中的所有行分配相同的编号 理想的是,通过SSIS中派生的列来做这件事比改变SQL代码更容易,但我会考虑这两个选项。 RunID Name ----- |---------------- 1 | A 1 | B 1 | C

我有一份定期运行的报告,并将其放入临时数据库中进行审查。它通过转换数据的SSIS进行处理;但是,我想添加一个运行ID,它将在每次运行趋势报告时以整数形式递增,但到目前为止,我还不知道如何做到这一点

目标不是为每一行分配一个新的编号,而是为一次运行中的所有行分配相同的编号

理想的是,通过SSIS中派生的列来做这件事比改变SQL代码更容易,但我会考虑这两个选项。

RunID   Name
----- |----------------
 1    |  A
 1    |  B
 1    |  C
 1    |  D
 2    |  A
 2    |  B
 2    |  C
 3    |  A

为RunID创建具有标识列的表。该表可以保存您想要的关于运行的任何其他信息,但至少我会包含运行日期时间

让SSIS包中的第一步是在表中插入新行并获取标识,然后用新行的标识填充包变量。这是你的RunID,你可以用它做任何你想做的事情

作为奖励,您将拥有跑步的永久历史记录、跑步发生的时间以及您选择存储的关于跑步的任何其他元数据。

您可以使用包变量来实现这一点

可以添加存储整数@[User::RunID]的包变量 在每次执行包时,使用执行SQL任务并使用类似查询从目标表获取最大RunID:

select ISNULL(max(RunID),0) + 1 from stg_table
将此值作为结果集添加到变量

这样,每次执行包时,该值将增加1

有关将结果映射到变量的更多详细信息,请参见以下链接:


如果运行id绑定到SSIS包的执行,则可以使用ExecutionInstanceGUID


是否确实需要SSIS包来转换数据?大多数事情都可以在T-SQL中完成

是否从临时表中删除数据?您可以执行类似于RunID=从stg_表+1中选择maxRunID这样的操作吗?注意是否需要创建索引,如果使用2012或更高版本,则可以使用sequence对象,如果使用2008或更低版本,则可以模拟sequence对象。根据您的描述,日期和时间可能比简单的整数更有用。我目前拥有的是类似的东西,但我找不到如何在我的数据流任务下执行SQL任务。我试图用ADO NET源代码和那个小SQL语句来完成同样的事情。这会完成同样的事情吗?您必须在dataflow任务之前运行它,将值存储在变量中,然后在dataflow任务内部使用此变量创建一个派生列,即使我发布了自己的答案,但对我来说,这是更简单的方法+1