如何在SQL Server和SSIS中创建“运行ID”
我有一份定期运行的报告,并将其放入临时数据库中进行审查。它通过转换数据的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中派生的列来做这件事比改变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