2017-04-10 1 views
0

이 질문은 일반적인 질문과 같이 보일 수 있습니다. 그러나 답변을 찾을 수없는 독특한 상황이 있습니다.DB 트리거로 인해 SSIS OLE DB 명령 메타 데이터 오류가 발생했습니다.

Excel 스프레드 시트에서 테이블을 업데이트하는 데 사용하려는 간단한 SSIS 패키지가 있습니다. 저장 프로 시저를 실행하는 OLE DB 명령 태스크를 사용하여이 작업을 수행합니다. 그러나 매핑 할 열 이름을 검색하지는 않습니다. 오류는 다음과 유사합니다.

'insert into #TempTable ...'문이 임시 테이블을 사용하기 때문에 메타 데이터를 확인할 수 없습니다. '

이 오류를 반환하는 이유와 일반적인 해결 방법을 알고 있습니다. 그러나 패키지 호출하는 저장 프로 시저에서 오류가 발생하지 않습니다. 그 proc은 임시 테이블을 사용하지 않습니다. 이 업데이트는 임시 테이블을 사용하는 다른 proc을 호출하는 데이터베이스 트리거를 시작한 결과입니다.

오류가 발생한 트리거 된 proc은 내가 개발중인 타사 응용 프로그램에서 발생하며 수정할 수 없습니다.

문제가되는 proc에 코드를 추가하는 것을 포함하지 않는 솔루션을 알고있는 사람이 있습니까?

감사합니다.

답변

1

옵션 1, Excel 스프레드 시트를 준비 테이블에로드 한 다음 'Execute SQL Task'를 사용하여 최종 테이블을 업데이트하십시오. 옵션 2, 스크립트 작업을 만들고 스프레드 시트에서 읽고 최종 테이블을 업데이트하여 열 매핑을위한 데이터 흐름을 피하십시오.

1

가장 좋은 방법은 업데이트를 전용 테이블 (OLE DB 대상) 대신에 실행 한 다음 SQL 실행 태스크를 후속 이벤트로 사용하는 것입니다.

SQL 실행 태스크에서 커서를 설정하여 준비 테이블을 파쇄 한 다음 저장 프로 시저를 호출하십시오.

DECLARE CSR CURSOR 
READ_ONLY 
FOR SELECT Col1, Col2 
FROM staging; 

DECLARE @Col1 nvarchar(100) 
, @Col2 nvarchar(100); 
OPEN CSR; 

FETCH NEXT FROM CSR INTO @Col1, @Col2; 
WHILE (@@fetch_status <> -1) 
BEGIN 
    IF (@@fetch_status <> -2) 
    BEGIN 
     EXECUTE dbo.MyProcedure @Col1, @Col2; 
    END 
    FETCH NEXT FROM CSR INTO @Col1, @Col2; 
END 

CLOSE CSR; 
DEALLOCATE CSR; 
0

스테이징 테이블 접근법은 게시 한 직후 나에게 일어났습니다. 이러한 단순한 패키지에는 적합하지 않지만 작동합니다. 커서가 필요하지 않습니다 ...이 패키지에 대해, 나는 단순히 스테이징 테이블에서 적절한 테이블을 업데이트 할 수 있습니다. 저장 프로 시저가 필요 없습니다. 둘 다 감사합니다!

관련 문제