我正在尝试为我在SQL Server中构建的表创建一个存档表。使用SSIS包我想将每个更改记录到表中并将其添加到存档表中。如果成功,我应该能够查询存档并构建在特定日期范围内存在的表,并且能够查询表以查看日期范围内的更改列表。在从我正在使用的数据源更新我的报表的SSIS包中,我有一个派生列任务,它将插入一个BOOLEAN值,一个事务日期,并且我想为每个事务添加一个唯一的整数id。没有明确的方法可以做到这一点,我想知道是否有人可以通知我?
作为参考,我的这个项目的模型是:
Source DATA --> SSIS --> Report Table --> Archival Table
我不能使用CDC,因为它没有在标准版本的SQL服务器中支持。这是我的派生列任务现在的样子。我想知道我可以使用什么样的表达式来获得Tx_ID
答案 0 :(得分:1)
这是最简单和推荐的方法,如果不需要在包中使用标识值,只需将Identity列添加到目标表
ALTER TABLE [Archival Table]
ADD Tx_ID INT IDENTITY(1,1)
在DataFlow Task
之前添加从此表中返回Execute SQL Task
的{{1}}
MAX(ID)
使用SELECT MAX(Tx_ID) FROM [Archival Table]
ResultSet
@[User::MaxID]
)中
Single Row
标记为@[User::MaxID]
变量ReadOnly
类型的输出列(例如:DT_I4
) 在脚本编辑器中使用以下代码(我使用的是Visual Basic语言)
NewTxID
在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 PreExecute()
MyBase.PreExecute()
CurrentID = Me.Variables.MaxID
End Sub
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
CurrentID += 1
Row.NewTxID = CurrentID
End Sub
End Class
将OLEDB Destination
列映射到目标标识列
<强>参考强>