2017-12-21 2 views
1

현재 데이터베이스에 대한 보관 및 제거 프로세스를 설정 중입니다. 며칠 전에 떠난 직원으로부터이 작업을 물려 받았다. 그는 지난 몇 개월 동안 (드물게) 작업을 해왔으므로 나는 그의 발걸음을 꽤 오래 헤쳐보고 말하고 그는이 모든 것을 준비했습니다. 우리는 예약 된 작업을 사용하여 보관 프로세스를 수행하고 있으며 그 부분을 대부분 배포 할 준비가되어 있습니다. 그러나 SSIS 패키지를 사용하여 제거 프로세스를 처리하고 있으므로 SSIS 패키지를 만들거나 수정 한 적이 없기 때문에 몇 가지 문제를 겪고 있습니다. 솔직히 말해서 어디서부터 시작해야할지 모르겠습니다. 문제 해결.SSIS를 사용하여 테이블 목록을 반복하여 삭제하려고 시도합니다.

본질적으로 우리는 보관되고 (결국 제거되는) 테이블 목록을 저장하는 데 사용되는 테이블을 가지고 있으며,이 테이블은 고아 레코드 또는 FK를 남기지 않도록 테이블을 제거해야하는 순서도 기록합니다 갈등. SSIS 패키지의 목적은 제거 순서에 따라 정렬 된 테이블 목록을로드 한 다음 각 테이블의 루프를 반복하고 각 레코드의 보관 날짜를 참조하는 WHERE 절을 기반으로 테이블을 삭제하는 것입니다. 내가 겪고있는 문제 중 하나는 테이블 이름을 SQL 명령의 매개 변수로 사용할 수 없다는 것이며이 문제를 해결할 수있는 몇 가지 방법을 시도하고 있음에도 불구하고 올바르게 작동하지는 못합니다.

다른 곳에서 읽은 내용을 토대로 나는 실행하려고하는 SQL 문을 포함하는 변수를 작성한 다음 해당 변수를 SQL 문 소스로 선택했지만 아직 올바르게 작성하지 못했습니다. . 난 잘못 SQL 명령을 포함하는 foreach 루프에서 테이블 이름을 당길 수 있습니다 생각하지만 내가 뭘 잘못하고 있는지 모르겠습니다.

제가 도움이된다면 사용하고있는 두 개의 SQL 명령을 아래에 게시 할 것입니다. foreach 루프를 게시하거나 명령 중 하나와 관련된 다른 정보를 게시 할 수 있습니다. 다시 한 번 내 질문의 모호함에 대해 사과드립니다. SSIS에 대해 아직 익숙하지 않아 실제로 제공되는 정보가 무엇인지 실제로 알 수 없습니다. 불행히도 이미지를 직접 게시 할 충분한 담당자가 없으므로 링크 만 제공 할 것입니다.

퍼지 주문 SQL 명령

image1

삭제 SQL 명령

image2

답변

1

답변을 주셔서 감사합니다, 나는 여전히 잘 모르겠지만 문제를 해결했습니다.격노하여, 나는 퍼지를 수행하는 책임이있는 SQL 명령을 삭제하려고 시도했다. 그런 다음 같은 방법으로 다시 작성했다. 당황스럽게이 문제가 수정되었습니다.

내가 말했듯이, SSIS 패키지가 어떻게 형성되는지에 대해 많이 알지는 못했지만 많은 메타 데이터와 기타 정보가 뒤에서 저장되었다고 생각합니다. 다른 사람들이 그곳에서 작업을하고있는 프로젝트를 시작한 이후로, 내가 한 변화가 어떻게 든 일을 끝내게 만들었던 기회였습니다. 분명히 이것은 사실이었다. 어쨌든 도움에 다시 한번 감사드립니다.

+0

귀하의 답변 인 경우에도이 답변을 수락해야합니다. 답변 옆의 투표 화살표 아래에있는 동의 표시를 클릭하기 만하면됩니다. – Hadi

2

그래 당신이 두 번째 SQL 작업을 설정 잘못했습니다. SQLSourceType으로 "변수"를 선택하면 SourceVariable 값은 SQL 문 텍스트가 들어있는 SSIS 변수의 이름이어야합니다. 그래서 대신

"어디에서 삭제 DATEADD (..."

귀하의 SourceVariable 값이 "사용자 : SQLCMD"같은 것을해야하고, 당신이되고 전체 SQL 명령으로 SQLCMD 변수를 채워해야 실행.

+0

확인. 그래서 저는 여러분이 언급 한 두 가지 분야를 설정했습니다. 그러나, 일어나고있는 것으로 보인다 변수를 채우는 데 사용하고있는 SQL 명령이 완전히 구성되지 않았다는 것입니다. 나는 아마 내 부분에 구문 오류가있을 것으로 예상한다. 나는 변수를 "DELETE FROM"+ @ [User :: TableName] + "WHERE DATEADD (month, 6, ArchiveDate) <= GETDATE()"와 정확히 일치하도록 설정했습니다. @ [User :: TableName] 값은 foreach 루프에서 전달되어야하는 테이블의 이름입니다. 그러나 변수의 값은 테이블 이름 표현식없이 되돌아옵니다. – Nick

+0

@ 닉 그럼 foreach 루프를 제대로 수행하지 못했습니다. 어떻게 객체 변수를 채우겠습니까? 그리고 어떤 매개 변수를 개체에서 채우고 있습니까? 어떤 순서로? – plaidDK

2

당신이 당신의 TableName 변수에 for each loop container의 각 루프의 결과를 결합하지 않은 것으로 보인다. 을 더블 클릭하시기 바랍니다 for each loop container 다음 다음 변수에 인덱스 0을 할당해야합니다, variable mapping로 이동. 감사합니다

관련 문제