2011-04-26 2 views
0

OLE DB 명령을 사용하여 입력 파일의 각 행에있는 데이터를 사용하여 삭제를 수행하려고합니다. 실제 쿼리는 SQL Server에서 수동으로 실행할 때 잘 작동하지만 (주어진 tableB.otherID가 int와 비교 됨) 매개 변수화하는 데 문제가 있습니다.SSIS 2008의 조인을 사용하여 매개 변수가있는 삭제를 수행하는 구문은 무엇입니까?

delete tableA from tableA 
where tableA.ID = ? 

위 쿼리를 실행하면 입력 열 중 하나를 tableA.ID에 할당 할 수 있습니다. 이것은 내가 기대하는 것입니다.

시도

delete tableA from tableA 
INNER JOIN tableB ON tableB.ID = tableA.ID 
where tableB.OtherID = ? 

는 ("멀티 파트 식별자 tableB.OtherID이 결합 할 수없는") 그러나 오류를 오류. '?'대신 값을 하드 코딩 이 오류가 나타나지 않게합니다.

올바른 구문 일 것 같은데, 위와 같은 문제가 있습니까?

답변

1

이 SSIS 버그/제한 될 것으로 보인다, 나는 join을 사용하여 유사한 매개 변수화 UPDATE 문을 수행 할 자신이없는 발견했습니다.

해결 방법 내가 원하는 delete 문을 사용하여 임시 저장 프로 시저를 만들고 매개 변수를 직접 전달하는 방식으로 종료되었습니다.

0

내가 원하는 TSQL 구문은 생각 :

DELETE FROM tableA 
FROM tableA INNER JOIN tableB ON tableB.ID = tableA.ID 
WHERE tableB.OtherID = ? 
+0

이것은 올바른 TSql이며 모든 정상적인 경우에 작동해야합니다. 위의 SSIS를 사용할 때 같은 오류가 여전히 throw됩니다, 아마도 기술의 기발한 것 같습니다? – John

0
DELETE FROM tableA 
FROM tableA INNER JOIN tableB ON tableB.ID = tableA.ID 
WHERE tableB.OtherID = @OrderId 

@OrderID이 SSIS에 변수가 있어야 할 곳에.

+0

이 값은 매번 입력 데이터 집합에서 한 번에 한 번씩 실행되며, 값은 매번 변경 될 때마다 비교됩니다. 데이터 흐름 내에서 OLE DB 명령 대신 솔루션이 작동하는 제어 흐름 내에서 SQL 실행 태스크를 생각한다고 생각합니다. – John

0

Execute Sql 작업을 사용하여 삭제해야하는 행 수에 따라 속도가 매우 느려집니다.

저에게 맞는 해결책은 삭제해야 할 행의 키를 스테이징 테이블에 넣는 것입니다. 그리고 나서 모두 들어있을 때 단일 명령문에서 모든 행을 삭제하는 하나의 명령문을 실행합니다 스테이징 테이블을 제거합니다. 그보다 더 빨리, 당신이 돈을 벌 수 있다는 것, 즉 기발한 것을 사용해야한다는 것입니까? 통사론. 나는 SQL을 조금 더 복잡하게 만들 때 너무 쉽게 혼합 할 수 있다고 생각하지 않았습니다.

감사 거트 얀은

관련 문제