2009-09-02 6 views
1

2 개의 레코드를 반환하는 저장 프로 시저가 있고 임시 테이블에서 select 문을 포함하고 있습니다. 그래서이 저장된 proc를 SSIS의 OLEDB 소스에 사용하고 레코드 세트를 삽입하려고하면 OLEDB 대상을 사용하여 대상 SQL 테이블에 저장합니다. 말 소스 측에서 오류를 던지고SSIS + 임시 테이블

그것 :

[OLE DB 원본 [1661]] 오류 : SQL 명령에 따라 행 세트는 OLE DB 공급자가 반환되지 않았습니다.

은 또한

이 도움이 필요하세요 ........... NOCOUNT에 세트 및 OFF

하지만 아무 소용의

SET FMTONLY으로 시도 ........

+0

진정한 = 지연 검증을, 같은 연결을 사용하세요? – Burnsys

+0

SSIS에서 호출 할 때 임시 테이블 사용을 포함하는 쿼리가 제대로 작동하지 않습니다. 제품 버그 일 수 있습니다. – Faiz

답변

2

이전에 비슷한 문제가 있었는데 SSIS가 동적 SQL의 출력을 결정할 수 없었기 때문입니다. 쿼리의 맨 위에 예상 출력과 일치하는 "가짜"Select 문을 포함하여 해결했습니다. 즉


CREATE PROCEDURE MyStoredProc 
AS 

    SELECT 1 As Field1, 2 As Field2, 3 As Field3 -- list of fields of appropriate type 
    WHERE 1 = 0 -- so nothing is actually returned 

    -- Real SQL goes here. 

GO 

+0

NULL 레코드 세트를 반환하지 않습니까? – Faiz

+0

예,하지만 SSIS가 쿼리를 구문 분석하면 올바른 스키마가 선택됩니다. 이상하지만 작동합니다. –

+1

다음 기사에서 권장하는 IF 1 = 2 블록을 사용하는 유사한 기술 : http://www.sqlservercentral.com/articles/Integration+Services+(SSIS)/65112/ – Jeff

0

당신은 SP 내부의 코드를 게시 할 수