2012-05-24 2 views
1

몇 가지 다른 것들 중에서 스크립트와 foreach 컨테이너를 사용하여 몇 개의 테이블을 업데이트하는 SSIS 패키지가 있습니다.SSIS에서 foreach 루프 컨테이너를 사용하여 다차원 배열을 반복 할 수 있습니까?

SELECT TOP 10 DirectoryID, DirectoryPath FROM ProjectDirectory ORDER BY LastAudit

및 다차원 배열 [10,2]에 추가 SqlDataReader을 사용하고 있습니다 : 나는 foreach는 컨테이너 전에 스크립트 작업에서이 쿼리를 호출 할 SqlConnectionSqlCommand을 사용하고 있습니다. 배열을 객체 변수 DirectoryList에 할당하여 foreach 루프 컨테이너에서 반복 처리 할 수 ​​있습니다. {{ "1", "C : \ Folder1"}, { "2", "C : \ Folder2"}와 같은 모양이어야합니다.

문제는 며칠 전이 소프트웨어를 사용하기 시작한 것이므로 foreach 루프 컨테이너가 DirectoryList 변수를 통해 반복되는 방식에 혼란 스럽습니다. 현재 컨테이너의 컬렉션 탭에서 Enumerator를 Forefach From Variable Enumerator로 설정하고 변수를 User::DirectoryList으로 설정했습니다. 나는 변수 User::DirectoryID을 인덱스 0으로 설정하고 User::DirectoryPath을 인덱스 1로 설정했습니다. 각 루프에서 ID와 경로 변수가 "1"로 지정되도록 배열의 최상위 레벨을 통해 루프를 가져 오려고합니다. 및 "C : \ Folder1"및 다음에 루프를 통과 할 때 "2"및 "C : \ Folder2"등이 할당됩니다. 경로를 사용하여 일부 정보를 찾는 스크립트 구성 요소가 있습니다. id를 사용하여 SQL 테이블의 올바른 행을 갱신하십시오.

디버깅하려면 첫 번째 반복의 ID와 경로 MessageBox.Show(Variables.DirectoryID + ", " + Variables.DirectoryPath)을 표시하고 "8, 8"을 표시하고 있습니다. 8은 첫 번째로 표시되어야하는 행의 ID에 해당합니다. 다음 번에 실행하면 "C : \ Folder1, C : \ Folder1"라는 올바른 경로가 두 번 표시됩니다. 그래서 명백하게 변수 매핑이 작동하지 않습니다. 두 변수를 같은 인덱스에 매핑합니다. 어떤 경우에는 작동하지 않으므로 foreground 컨테이너에서 다차원 배열을 사용할 수 없거나 변수 계산자에서 Foreach를 선택해야합니다. 나는 아무것도 찾지 못했지만이 모든 것이 이해하기 힘들지 만 어떤 제안이 있겠습니까?

답변

2

좋아요, 당신은 실제로 그렇게하지 않아도됩니다. 소스가 t-sql 쿼리이기 때문에 "SQL 실행 태스크"로 실행할 수 있습니다. 하지만 그건 괜찮아.이 방법도 그렇게 할 수있어. 현재 실제로 패키지 작업 중입니다. 결과를 스크립트 태스크의 데이터 테이블로 가져 와서 DirectoryList와 마찬가지로 객체 변수에로드합니다.

은 변수가 개체 변수 같은 루프를 구성, 값을 읽으려면 : 변수가 패키지 변수입니다 :이 같은

enter image description here

및 매핑 탭에서

, 첫 번째 열 (인덱스 0)의 값을 배치 할 위치를 지정합니다. 결과 집합에 열을 가질 수있는만큼의 인덱스를 가질 수 있습니다.

enter image description here

그리고 당신은 현재 값과의 변수에 액세스 할 수

+1

최고 감사해야합니다 루프 내부에, 그것은이다! 네가 말했듯이 SQL 대신 Execute SQL Task를 사용하는 것으로 끝났다. 실제로 모든 스크립트가 그랬기 때문이다. 이제는 다른 SQL 실행 태스크에 DateTime 변수를 전달하고 테이블의 한 행을 업데이트하는 방법을 파악하려고합니다. 나는 주위에 Google, 감사합니다! –

관련 문제