2012-10-22 2 views
2

이 문제는 기본적인 문제인 것처럼 보이지만이 문제에 대한 효율적인 해결책을 찾으려면 제 머리를 찢어 냈습니다.ADIS.net 소스에 대한 SSIS 변수 SQL 명령

나는 C# Script 작업을 사용하여 읽고 읽은 서버에서 값의 조회 테이블을 가지고 있습니다. 필자는이 문자열을 내 데이터 흐름에서 ADO.NET 데이터 소스 (다른 서버의 읽기 전용 액세스 권한)에있는 큰 SQL 쿼리 내 WHERE 매개 변수로 전달하려는 변수에 씁니다. 예를 들어,이 문자열은 단지

('Frank', 'John', 'Markus', 'Tom') 

과 같을 것이며, WHERE 절을 추가 할 것입니다. ADO.NET 데이터 원본에 대한 변수를 직접 읽을 수 없으며 SQL 쿼리가 4000자를 넘기 때문에 '식'속성을 사용하여 SQL을 설정할 수 없습니다. Execute SQL Task를 사용하여 쿼리를 실행하고 결과를 레코드 세트에로드 한 다음 레코드 세트를 반복합니다.하지만 매우 비효율적입니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 나의 최종 목표는 이러한 결과를 첫 번째 서버의 테이블에 넣는 것입니다.

+0

매개 변수 값을 테이블에 삽입 한 다음 쿼리를 작성하여 해당 테이블의 매개 변수 값을 가져옵니다. – RBarryYoung

+0

관리자 권한이있는 서버의 테이블에서 매개 변수를 조합합니다. 문제는 이러한 매개 변수를 사용하여 다른 서버에서 쿼리를 실행해야한다는 것입니다. 또는 데이터 흐름 내부에서 스크립트 작업을 수행하도록 제안 하시겠습니까? – user1384831

+0

아니, 당신이 생각한 것은 내가 의미했던 것입니다. – RBarryYoung

답변

2

스크립트 구성 요소를 소스 변수로 설정하려고 할 수 있으며 스크립트 내부의 문자열이 4000자를 넘을 수 있으므로 쿼리를 내부에 넣을 수 있습니다.

설정하여이 문서와 유사한 구성 요소 : http://beyondrelational.com/modules/2/blogs/106/posts/11119/script-componentsource-part1.aspx 어떻게 ExecuteReader를 사용하여 데이터를 가져오고 스크립트 구성 요소의 출력에 넣어하는 예를 가지고이 일에 : 당신이 제대로 연결을 aquire하는 방법 지침을 가지고이 일에 http://beyondrelational.com/modules/2/blogs/106/posts/11124/ssis-script-component-as-source-adonet.aspx : http://www.toadworld.com/platforms/sql-server/b/weblog/archive/2011/05/30/use-connections-properly-in-an-ssis-script-task

이 정보를 결합하면 동적으로 생성 된 모든 길이의 쿼리를 사용하여 데이터를 가져올 수있는 소스 스크립트 구성 요소를 작성할 수 있습니다.

행운을 빕니다 :)

+0

고마워요! 스크립트 구성 요소를 소스로 사용하는 것을 생각한 적이 없어서 프로그래밍 방식으로 SSIS 쿼리를 만들 수있는 방법이 생겼습니다. D – user1384831

0

당신은 ('Frank', 'John', 'Markus', 'Tom') 포함됩니다 값의 목록을 반환하는 간단한 select 문을 수행 할 수 있습니다. 그래서 select는 반환 :

Name 
---------- 
Frank 
John 
Markus 
Tom 

을 그리고, SSIS에서 대신 메인 쿼리의 where 절의이 Merge Join Component (즉, INNER JOIN 역할을합니다)를 사용합니다.

원하는 것을 달성하는 가장 깨끗한 방법입니다.