代码之家  ›  专栏  ›  技术社区  ›  Ranjith Varatharajan

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

  •  1
  • Ranjith Varatharajan  · 技术社区  · 8 年前

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

    有什么办法吗 不使用脚本或存储过程?

    截图:

    enter image description here

    3 回复  |  直到 8 年前
        1
  •  3
  •   Hadi    8 年前

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

    (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 ,映射 新ID 列到目标标识列

    (2) 使用临时表

    与我在 this answer :

    1. 创建具有标识列的临时表
    2. 每次截断表 (这将重新启动标识) ,并将数据插入临时表
    3. 使用从临时表插入数据 DataFlow Task Execute SQL Task
        2
  •  2
  •   Yahfoufi Ahmed Yahia    8 年前

    可以将临时表与 IDENTITY(1,1) 列,每次执行包时都必须 TRUNCATE 要重置的表 IDENTITY . 所以每次都会从 1

    也可以使用脚本组件编写自己的逻辑

        3
  •  0
  •   Jayasurya Satheesh    8 年前

    您可以在数据库本身中实现这一点,而无需在SSIS包中添加逻辑。只需向目标表中添加一个标识为的列,它就会自动递增。无需在SSIS中添加其他逻辑

    只需更改表,即可添加标识列(如果表中还没有标识列)

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

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

    推荐文章