0

모두.SSIS Ole DB 소스 매개 변수가 연결된 서버에서 저장 프로 시저로

연결된 서버의 저장 프로 시저를 사용하고 있습니다. 올레 DB 소스에서 프로 시저를 사용하고 싶습니다.

SSIS에서 작동하는 쿼리를 작성했습니다.

select ID, 

LAST_NAME_ENG, 

LAST_NAME_G, 

FST_NAME_ENG, 

FST_NAME_G, 

BIRTHDATE 

from openquery (linkedserver, 
'exec [linkedserver].get_records @SESSION_ID = 12 , @SYSTEM = ''oCRM'', @ENTITY_NAME = ''CLIENT'' 

WITH RESULT SETS (([ID] [int] NOT NULL, 

[LAST_NAME_ENG] [varchar](50) NOT NULL, 

[LAST_NAME_G] [varchar](50) NOT NULL, 

[FST_NAME_ENG] [varchar](50) NOT NULL, 

[FST_NAME_G] [varchar](50) NOT NULL, 

[BIRTHDATE] [date] NOT NULL))'); 

SSIS ole db 소스에서 사용할 수 있으며 필요한 데이터를 성공적으로 가져올 수 있습니다. 그러나 다음 단계에서 문제가 있습니다 :

'12'대신 SSIS에서 매개 변수를 @SESSION_ID에 전달해야합니다. 그리고 나는 그것을 할 올바른 방법을 찾을 수 없습니다.

dynamics sql을 사용하고 필수 매개 변수 값과 함께 전체 쿼리 문자열을 구성한 다음 exec를 실행하는 방법에 대한 조언이 많이 있지만 SSIS는 동적 쿼리에서 열 데이터를 가져올 수 없습니다.

해결 방법이 있습니까? 아이디어가 도움이 될 것입니다.

감사합니다.

관련하여, Yuriy.

+0

다른 서버에 직접 연결하지 않는 이유는 무엇입니까? –

+0

불행히도 이것은 허용되지 않습니다. –

답변

1

문자열 변수 (예 : )를 생성하십시오. SQL_Query. 변수 정의에서 EvaluateAsExpression을 설정하고 표현식을 "your SQL statement ... @SESSION_ID = " + [User::Session_ID_Variable] + " rest of SQL statement"으로 정의합니다. 여기에서 Session_ID_Variable에 조건 값이 포함되어 있습니다. Session_ID_Variable이 문자열이 아닌 경우 - 문자열을 (DT_WSTR, length)으로 캐스팅해야합니다. 결과는 SQL_Query이 목표 SQL 표현식이됩니다.
그런 다음 OLE DB 원본 - SQL 명령 원본으로 변수를 지정하고 [User :: SQL_Query]을 선택하십시오.
저장 프로 시저는 모든 경우에 동일한 형식의 결과 집합을 반환해야합니다. 결과 집합을 반환하지 않는 SP는 DataSource를 실패합니다.

+0

안녕하세요, Ferdipux. 답변 해 주셔서 감사합니다. 그것은 공통적으로 작동합니다. 그러나 기존 세션의 식별자 인 @SESSION_ID 변수를 전달할 때만 Ole DB Source 블록의 유효성을 검사하고 성공적으로 저장할 수 있습니다. 해당 세션이없는 경우 - 오류가 발생합니다. https://i.gyazo.com/5bbaf08a3884b8600439b6ea31212da1.png –

+0

정상입니다. 패키지 설계 단계에서 모든 구성 요소의 유효성을 검사해야합니다. 따라서 OLE DB 원본은 메타 데이터를 결정하기 위해 일부 행을 반환해야합니다. 런타임시 null 결과가 좋을 것입니다. – Ferdipux

+0

https://i.gyazo.com/7e076b41384c2e8003637618fa13c0b6.png 불행히도 작동하지 않습니다 ( –