这是以下情况:我有一张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存在于表中。上述条件基本上检查,如果是,那么列将有日期,否则如果值是,则将有当前日期Syncprimary keyTargetnew rowaddedCreateTimeStampcurrentmodifiedTimeStampnullupdatedmodifiedTimeStamp
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
