How to synchronize two tables in SSIS

I have a scenario where i need to synchronize two tables in SSIS

Table A is in DATABASE A and TABLE B is in DATABASE B. Both tables have same schema. I need to have a SSIS package that Synchronize TABLE A with TABLE B in Such a way That

1. It inserts all the records That Exist in Table A into Table B

AND

2. Update TABLE B if Same "Key" exsit in Both but Updated records in Table A

For Example Table A and B both Contains Key = 123 both Few Columns in Table A has been Updated.

I am thinking about using Merge Joins but that helps with only insertion of New records. How i can manage to implement UPDATE thing as well

Upvotes: 3

Views: 11375

Answers (1)

praveen
praveen

Reputation: 12271

1.It inserts all the records That Exist in Table A into Table B 

Use a lookup transformation .Source will be Table A and Lookup will be Table B .Map the common columns in both the table and select those columns which you need for insertion.After lookup use OLEDB destination and the map the columns coming from the lookup and insert it into Table B

2.Update TABLE B if Same "Key" exsit in Both but Updated records in Table A

Same logic as above .Use lookup and instead of OLEDB Destination use OLEDB Command and then write the update sql .

Update TableB
Set col1=?,col2=?....

In the column mapping map the columns coming out of the lookup

Check out this article Checking to see if a record exists and if so update else insert

Using Merge :

MERGE TableB b
USING TableA a
ON b.Key = a.Key
WHEN MATCHED AND b.Col1<>a.Col1 THEN
UPDATE
SET b.Col1 =  a.Col1 
WHEN NOT MATCHED BY TARGET THEN
INSERT (Col1, Col2, col3)
VALUES (a.Col1, a.Col2,a.Col3);

You can execute the Merge SQL in Execute SQL Task in Control Flow

Update : The Lookup transformation tries to perform an equi-join between values in the transformation input and values in the reference dataset.

You can just need to have one Data Flow Task .

Diagram

enter image description here

When the target table data does not have a matching value in the source table then lookup will redirect the target rows to the oledb destination which inserts the Data into source table( Lookup No Match Output)

When the target table rows matches for the business key with the source table then matched rows will be sent to the Oledb Command and using the Update SQL ,the all the target rows from the lookup will be updated in the source table .

This is just an overview .There is a problem with the above design as when the rows matches irrespective of any change in the columns the source table will be updated .So kindly refer the above article or try for search for SCD component in ssis

Update 2:

MERGE TableB b
USING TableA a
ON b.Key = a.Key
WHEN MATCHED  THEN
UPDATE
SET b.Col1 =  a.Col1 
WHEN NOT MATCHED BY TARGET AND a.IsReady=1 THEN  --isReady bit data type
INSERT (Col1, Col2, col3)
VALUES (a.Col1, a.Col2,a.Col3);

Upvotes: 2

Related Questions