使用SSIS插入记录时添加增量编号

时间:2018-01-22 09:14:16

标签: sql-server ssis etl identity

我有一个SSIS包,其中有两条记录。我需要用一个额外的列插入表中的记录(让我们说顺序)。如果有两个记录,则Sequence列的值应为1(对于第一个记录)和2(对于第二个记录)。再次,下一次,我得到三个记录,然后再次从1,2和3开始。

在没有使用脚本或存储过程的情况下,有没有这样做

截图:

enter image description here

3 个答案:

答案 0 :(得分:1)

您可以使用包含IDENTITY(1,1)列的临时表,每次执行包时,TRUNCATE表都要重置IDENTITY。所以每次都从1

开始

或者您可以使用脚本组件编写自己的逻辑

答案 1 :(得分:1)

有两种方法可以实现这一目标:

(1)为什么不使用脚本组件?

我认为使用脚本组件更高效,更受控制,您可以编写自己的逻辑

  1. 在DataFlow任务中添加脚本组件
  2. 添加DT_I4 类型的输出列(例如:NewID
  3. 在脚本编辑器中使用以下代码(我使用的是Visual Basic语言)

    Imports System  
    Imports System.Data  
    Imports System.Math  
    Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper  
    Imports Microsoft.SqlServer.Dts.Runtime.Wrapper  
    
    <Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _  
    <CLSCompliant(False)> _  
    Public Class ScriptMain  
        Inherits UserComponent 
    
        Private CurrentID as Integer  = 0
    
    
        Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)  
    
            CurrentID += 1
    
            Row.NewID = CurrentID
    
    
        End Sub 
    
    End Class
    
  4. OLEDB Destination中,将NewID列映射到目标标识列

  5. (2)使用临时表

    与我在this answer中提到的相似:

    1. 使用标识列
    2. 创建临时表
    3. 每次截断表(这将重启身份),并将数据插入临时表
    4. 使用DataFlow TaskExecute SQL Task
    5. 从登台表插入数据

答案 2 :(得分:0)

您可以在数据库中实现此目的,而无需在SSIS包中添加逻辑。只需使用IDENTITY将Column添加到Destination表中,它就会自动递增。无需在SSIS中添加一些附加逻辑

你可以通过改变你的表来添加IDENTITY列(如果你的表上没有一个)

ALTER TABLE YourTable
ADD SeqNo INT IDENTITY(1,1)

IDENTITY(1,1)对于第一个记录,SeqNo的值为1,然后对于每个插入的记录,它将增加1