我有一个SSIS包,其中有两条记录。我需要用一个额外的列插入表中的记录(让我们说顺序)。如果有两个记录,则Sequence列的值应为1(对于第一个记录)和2(对于第二个记录)。再次,下一次,我得到三个记录,然后再次从1,2和3开始。
在没有使用脚本或存储过程的情况下,有没有这样做?
截图:
答案 0 :(得分:1)
您可以使用包含IDENTITY(1,1)
列的临时表,每次执行包时,TRUNCATE
表都要重置IDENTITY
。所以每次都从1
或者您可以使用脚本组件编写自己的逻辑
答案 1 :(得分:1)
有两种方法可以实现这一目标:
我认为使用脚本组件更高效,更受控制,您可以编写自己的逻辑
DT_I4
类型的输出列(例如:NewID
) 在脚本编辑器中使用以下代码(我使用的是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
在OLEDB Destination
中,将NewID
列映射到目标标识列
与我在this answer中提到的相似:
DataFlow Task
或Execute SQL Task
答案 2 :(得分:0)
您可以在数据库中实现此目的,而无需在SSIS包中添加逻辑。只需使用IDENTITY将Column添加到Destination表中,它就会自动递增。无需在SSIS中添加一些附加逻辑
你可以通过改变你的表来添加IDENTITY列(如果你的表上没有一个)
ALTER TABLE YourTable
ADD SeqNo INT IDENTITY(1,1)
IDENTITY(1,1)对于第一个记录,SeqNo的值为1,然后对于每个插入的记录,它将增加1