这是以下情况:我有一张StudentsA表,需要与另一台服务器上的另一个表同步,StudentsB。这是从 A 到 B 的单向同步。由于表 StudentsA 可以保存大量行,因此我们有一个名为StudentsSync的表(在输入服务器上),其中包含自上次从 StudentsA 复制以来已修改的StudentA的ID给学生 B .
我做了以下 SSIS 数据流任务:
唯一的问题是我需要在成功复制或更新后从StudentSync中删除该行。像这样的东西:
知道如何实现吗?
这是以下情况:我有一张StudentsA表,需要与另一台服务器上的另一个表同步,StudentsB。这是从 A 到 B 的单向同步。由于表 StudentsA 可以保存大量行,因此我们有一个名为StudentsSync的表(在输入服务器上),其中包含自上次从 StudentsA 复制以来已修改的StudentA的ID给学生 B .
我做了以下 SSIS 数据流任务:
唯一的问题是我需要在成功复制或更新后从StudentSync中删除该行。像这样的东西:
知道如何实现吗?
可以使用3种方法来实现
1.如果您的target
表中 OutputDB
有TimeStamp
列,例如 Create
,modified TimeStamp
然后行已经获得updated
或inserted
可以通过编写简单查询获得。您需要在Tableexecte sql task
中Control Flow
的delete
这些行中写入以下查询。Sync
Delete from SyncTable
where keyColumn in (Select primary_key from target
where ModifiedTimeStamp >= GETDATE() or (ModifiedTimeStamp is null
and CreateTimeStamp>=GETDATE()))
我假设与表一起StudentsA's
primary key
存在于表中。上述条件基本上检查,如果是,那么列将有日期,否则如果值是,则将有当前日期Sync
primary key
Target
new row
added
CreateTimeStamp
current
modifiedTimeStamp
null
updated
modifiedTimeStamp
TimeStamp
如果您的表中有列,则上述查询将起作用target
,如果您将数据加载到其中,我认为这些列应该存在Data Warehouse
2.您可以使用MERGE
语法来执行更新和插入。Control Flow
无需Execute SQL Task
使用Data Flow Task
。即使您没有,也可以使用以下查询TimeStamp columns
DECLARE @Output TABLE ( ActionType VARCHAR(20), SourcePrimaryKey INT)
MERGE StudentsB AS TARGET
USING StudentsA AS SOURCE
ON (TARGET.CommonColumn = SOURCE.CommonColumn)
WHEN MATCHED
THEN
UPDATE SET TARGET.column = SOURCE.Column,TARGET.ModifiedTimeStamp=GETDATE()
WHEN NOT MATCHED BY TARGET THEN
INSERT (col1,col2,Col3)
VALUES (SOURCE.col1, SOURCE.col2, SOURCE.Col3)
OUTPUT $action,
INSERTED.PrimaryKey AS SourcePrimaryKey INTO @Output
Delete from SyncTable
where PrimaryKey in (Select SourcePrimaryKey from @Output
where ActionType ='INSERT' or ActionType='UPDATE')
代码没有经过测试,因为我的时间不多了。但至少它应该让你对如何继续有一个公平的想法。.有关MERGE
语法的更多详细信息,请阅读this和this
3.使用Multicast
组件到duplicate
数据集Insert
和。Update
连接一个MULTICAST
到lookmatch
输出和另一个多播到Lookup No match output