这里是以下情况:我有学员对于一个表,需要与另一个表同步,不同的服务器,StudentsB上。 这是从一个单向同步到B.由于该表学员对于可以容纳大量的行,我们有一个名为StudentsSync(输入服务器上),包含自从学员对于最后的副本已修改的学员对于的ID表到StudentsB。
我做了以下SSIS数据流任务:
唯一的问题是,我需要一个成功复制或更新后删除从StudentsSync行。 事情是这样的:
任何想法如何可以做到这一点?
这里是以下情况:我有学员对于一个表,需要与另一个表同步,不同的服务器,StudentsB上。 这是从一个单向同步到B.由于该表学员对于可以容纳大量的行,我们有一个名为StudentsSync(输入服务器上),包含自从学员对于最后的副本已修改的学员对于的ID表到StudentsB。
我做了以下SSIS数据流任务:
唯一的问题是,我需要一个成功复制或更新后删除从StudentsSync行。 事情是这样的:
任何想法如何可以做到这一点?
它可以使用3种方法来实现
1.如果你的target
表OutputDB
具有TimeStamp
列,比如Create
和modified TimeStamp
然后已经得到行updated
或inserted
可以通过编写一个简单的查询得到。 你需要写在下面的查询execte 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.You可以用MERGE
语法来执行更新和插入Control Flow
与Execute SQL Task
。没有需要使用Data Flow Task
.The下面的查询可以使用,即使你没有任何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')
因为我的时间不多了。但在,至少它应该给你一个公平的想法如何进行代码没有进行测试。 。对于在furthur详细MERGE
语法,阅读这和这
3.使用Multicast
组件,以duplicate
的数据集Insert
和Update
.Connect一个MULTICAST
到lookmatch
输出和另一个多播Lookup No match output