2013-03-29 1 views
2

를 삽입 : 내가 다른 서버에 다른 테이블과 동기화 될 필요가 의 테이블 StudentsA, StudentsB이 . A에서 B로 단방향 동기화입니다. 테이블 StudentsA는 많은 행을 보유 할 수 있으므로 (입력 서버에서) ID가 인 studentsA이 포함 된 테이블이 있습니다. StudentsA to StudentsB의 마지막 사본.SSIS는 : 업데이트 후 행을 삭제하거나 여기에 다음과 같은 상황이

enter image description here

유일한 문제는 내가 성공적으로 복사 또는 업데이트 후 StudentsSync에서 행을 삭제해야한다는 것입니다 :

나는 다음과 같은 SSIS 데이터 흐름 작업을했다. 이런 식으로 뭔가 :이

enter image description here

어떤 생각을 달성 할 수있는 방법?

답변

1

그것은 OutputDBtarget 테이블 설치 1. 3 가지 방법

을 사용하여 달성 한 후 updated 가지고 또는 inserted는 간단한 쿼리를 작성하여 얻을 수있는 행을 같은 Createmodified TimeStampTimeStamp 열이 될 수있다. execte sql taskControl 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 keyTarget 테이블의 primary key과 함께 Sync 테이블에 존재하는 가정합니다. new row이 값이 updated있는 경우 TimeStamp 열이있는 경우 다음 modifiedTimeStamp가 위의 쿼리가 작동 현재 날짜

있을 것이다 added 다음 CreateTimeStampcurrent 날짜를하고 modifiedTimeStamp 다른 null 될 것 인 경우 위의 조건은 기본적으로 확인 내가 Data Warehouse

2.You에 당신의 데이터를로드 업데이트를 수행 할 MERGE 구문을 사용하고 Execute SQL Task - 안돼과 Control Flow에 삽입를 사용해야 할 경우가있을한다고 생각하여 target 테이블에.당신이 어떤 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') 

내가 시간이 나누었다에서 - 적어도 그 진행 방법 당신에게 공정한 아이디어를 줄 것이다 실행 해요로 코드는 테스트되지 않은이없는 경우 아래의 쿼리도 사용할 수 있습니다 . .FOR MERGE 더 furthur 구문에 대한 세부 Insertthisthis

3.Use Multicast 부품 duplicate에 데이터 집합을 판독 Update .Connect MULTICASTlookmatch 출력과 Lookup No match output

enter image description here

+0

제 3의 해결책이 제 문제에 가장 적합합니다. 나는 처음 2 개가 다른 서버에서 DB를 사용한다고 생각하지 않는다. – JackoBongo

0
  1. "기존 항목 업데이트"와 "새 항목 삽입"다음에 작업을 추가하여 삭제할 ID 목록이 포함될 변수에 학생 ID를 추가하십시오.
  2. 모든 작업을 시퀀스 컨테이너에 포함합니다.
  3. 시퀀스 컨테이너 실행 후 동기화 테이블에서 채우고있는 변수에있는 모든 레코드를 삭제하는 작업을 추가하십시오.
+1

또 다른 멀티 캐스트 사용자' SSIS 2008까지 '목적지'(새 항목 삽입) AFAIK 다음에 구성 요소를 추가 할 수 없습니다. '오류 출력' – praveen

+0

SSIS 2012에서 여전히 수행 할 수 없습니다. – JackoBongo

관련 문제