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

Add incremental number while inserting records using SSIS

我有一个 SSIS 包,其中有两条记录。我需要在 table 中插入带有额外列(比方说序列)的记录。如果有两条记录,Sequence 列的值应为 1(对于第一条记录)和 2(对于第二条记录)。同样,下一次,我得到三个记录,然后序列再次从 1,2 和 3 开始。

是否可以在不使用脚本或存储过程的情况下执行此操作?

截图:

您可以在数据库本身中实现这一点,而无需在 SSIS 包中添加逻辑。只需使用 IDENTITY 向目标 table 添加一个列,它就会自动递增。无需在 SSIS 中添加一些额外的逻辑

您可以通过更改 Table

添加 IDENTITY 列(如果 Table 上还没有)
ALTER TABLE YourTable
ADD SeqNo INT IDENTITY(1,1)

IDENTITY(1,1) 表示第一条记录的SeqNo值为1,然后每插入一条记录就加1

您可以使用带有 IDENTITY(1,1) 列的暂存 table,每次执行包时都必须 TRUNCATE table 重置 IDENTITY.所以每次都会从1

开始

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

有两种方法可以实现:

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

我觉得使用脚本组件效率更高,控制性更好,可以自己写逻辑

  1. 在数据流任务中添加一个脚本组件
  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列映射到目标标识列

(2) 使用分段 Table

就像我在中提到的一样:

  1. 使用标识列
  2. 创建暂存table
  3. 每次截断 Table (这将重新启动身份),并将数据插入暂存 table
  4. 使用 DataFlow TaskExecute SQL Task
  5. 从暂存 table 插入数据