2017-09-05 19 views
1

SSIS 신참 여기에 있습니다.ssis 임시 테이블 exec proc

마법사를 기반으로 만든 SSIS 패키지가 있습니다. 프로세스를 한 걸음으로 줄이기 위해 이전에 실행하고 있던 스크립트를 실행하기 위해 SQL 작업을 추가했습니다. 이 스크립트는 많은 임시 테이블과 마지막에 전역 ## temp를 사용하여 프로세스 외부에서 결과에 액세스 할 수 있도록합니다.

패키지를 실행하려고하면 복잡한 "패키지 유효성 검사 오류"(오류 코드 0x80040E14)가 나타납니다. 나는 오류 메시지의 작동 부분이 "잘못된 개체 이름 '## roster5'라고 생각합니다."

방금 ​​오류를 던지고있는 데이터 흐름 작업임을 깨달았으므로 데이터 흐름 작업에서 테이블이 있음을 볼 수 있도록 다른 모든 작업 전에 테이블을 만들려고했습니다. 하지만 그것은 여전히 ​​나에게 오류를주고있다 : "잘못된 개체 이름 '## ROSTER_MEMBER_NEW5'."

무엇이 잘못되었거나 잘못 되었습니까? 나는 내가 모르는 것을 모른다. 이것이 복잡하지 않아야하는 것처럼 보입니다. (초보자로서, 아마도 이것은 중복 된 것 같습니다. 그러나 다른 질문을 할 수있는 방법을 모르겠습니다.)

+0

몇 가지 해결책이 있습니다. 먼저 ## roster5, ## roser) member_news5에서 예상되는 행 수를 말해주십시오. – plditallo

+0

oops, ## roster5는 전체 이름의 줄임말입니다. 스크립트에 의해 생성 된 약 500 만 행이 있습니다. – hmmmmm

+0

#temp 테이블을 테이블 변수 (예 : @temptable)로 변환하는 몇 가지 제안 사항이 표시됩니다. 옵티마이 저는 variable 테이블을 성능에 영향을 줄 수있는 단일 행이있는 테이블로 취급합니다. frmt off (https://stackoverflow.com/questions/1579476/using-temp-tables-in-ssis)와 같은 다른 제안도 볼 수 있습니다. 이것 역시 성능에 영향을 미칠 것입니다. 식별 할 수있는 스키마가있는 스테이징 테이블을 작성한 다음 채 웁니다. – plditallo

답변

0

다른 옵션은 독립 실행 형 T-SQL을 실행하는 SQL 에이전트 작업에 T-SQL 단계를 추가하는 것입니다. 원래 SSIS 패키지의 흐름 제어를 재고하고이를 2 개의 개별 패키지로 분할해야합니다. 첫 번째 SSIS 패키지는 T-SQL 단계 전에 필요한 모든 것을 실행하고, 다음 단계는 집계에 필요한 실제 T-SQL을 실행 한 다음 마지막 단계는 두 번째 패키지를 호출하여 프로세스를 완료합니다.

나는이 조언이 권장 할만한 경고와 함께 제공하고있다. 가장 좋은 방법은 DBA와 통신하는 것입니다. DBA는 프로세스 관리를 위해 준비 테이블을 잘라내는 데 필요한 높은 권한으로 SSIS 패키지를 실행하는 서비스 계정을 제공 할 수 있습니다.

0

실제로 답변을 게시하고 싶습니다. 내가 할 수있는 한 위의 조언을 따르려고했지만 아무 것도 효과가 없었다. 내 스크립트가 실행되어야하고 데이터 펌프가 있어야만 기본적으로 전역 temp의 내용을 다른 서버/테이블에 복사해야합니다. 나는 이것을 두 단계로하고 있었고 SSIS를 사용하여 한 걸음 씩 다 해냈다. 실제로 SSIS 내에서 구성 요소간에 값을 전달할 필요는 없었습니다. 그렇게 열심히 노력해야하는 것 같지 않습니다.

아무튼 나는 아무 말도하지 않았다. 좋아, 내가 무슨 일이 일어 났는지 말해 줄께. 실수를 많이하고, 많은 실행을 취소하고, 실패한 시도를 많이 한 후에 뭔가 작용하기 시작했습니다. 내가 기여한 것 중 하나는 ResultSetType을 ResultSetType_None으로 설정했다는 것입니다. 그 단계의 결과를 사용하지 않았기 때문입니다. 아무도 그렇게 생각하지 않는다면, 배우고 싶어서 현실을 듣고 기뻐합니다.

나는 이것이 내가 옳다는 확신이 거의 없거나 사고 이외의 것으로 얻었 기 때문에 이것을 무응답이라고 생각한다.