2013-11-27 2 views
17

SSIS를 사용하여 나중에 새 시스템에서 사용할 수 있도록 새 데이터를 생성하고 변환합니다. 내 SSIS 패키지를 실행할 때마다 문제가 발생하여 대상 테이블에 새 레코드를 계속 삽입합니다.SSIS에 새 레코드를 삽입하기 전에 대상 테이블을 비우는 방법?

먼저 대상 테이블 (/ OLE DB 대상)을 비운 다음 새로 생성 된 레코드를 삽입 할 수 있습니까?

현재이 문제의 해결 방법은 패키지를 실행하기 전에 delete from DestTable을 수행하는 것입니다.

+0

'Execute SQL Task'에 delete 문을 넣으십시오. 그런 다음 흐름의 첫 번째 구성 요소로 만듭니다. – TsSkTo

+0

그것은 해결책이 될 수 있습니다, 당신은 대답으로 줄 수 있습니다. – SamekaTV

답변

32

웁니다이

truncate table table_name 

를 사용해야합니다. 그런 다음 흐름의 첫 번째 구성 요소로 만듭니다. 구성 요소는 다음과 같은 :

enter image description here

+15

'TRUNCATE TABLE '은 행이 많은 테이블의 경우 * 많이 * 더 좋습니다. 뿐만 아니라 트랜잭션 로그를 채우지도 않습니다. 3 천만 개의 행이있는 테이블에서 DELETE FROM 명령을 실행 한 후 디스크를 가득 채우는 트랜잭션 로그로 인해 프로덕션 데이터베이스 서버가 손상되었습니다. – Dan

-2

당신은 Execute SQL Task에서 삭제 문을 넣어이 테이블을

+0

SSIS에 적용하고 해결 방법 – SamekaTV

+0

을 사용하지 않으려면 exe-sql 작업에 넣을 수 있습니다.'delete from table'과'truncate table'도 똑같이합니다 !! –

+3

그들은 정말로 그렇게하지 않습니다. 그들은 비슷하지만 그럼에도 불구하고 다르다. 링크를 클릭하십시오. http://www.mssqltips.com/sqlservertip/1080/deleting-data-in-sql-server-with-truncate-vs-delete-commands/ – TsSkTo

25

는이 SQL 실행 작업을 만듭니다. 그것을 먼저 실행하십시오. sqlstatment의 경우 do.

Truncate table DestTable 

truncate table을 사용하면 모든 인덱스를 무시하고 모든 것을 제거하기 때문에 delete를 사용하는 것이 좋습니다.

약간의 배경 정보. 나는 왜 테이블 삭제 대신 truncate table을 사용해야하는지 설명 할 것이다. 테이블 삭제는 행 기반 작업이므로 각 행이 삭제됩니다. 테이블 자르기는 전체 데이터 페이지가 구획 된 데이터 페이지 조작입니다. 백만 행이있는 테이블을 가지고 있다면 테이블을 잘라내는 것이 훨씬 빠를 것입니다. 그런 다음 테이블 삭제 명령을 사용하는 것이 좋습니다.

+0

당신은 이것에 관해 확실합니까? –

+0

그것의 방법.새로운 정보를 다시로드하기 전에 스테이지 테이블에서 데이터를 제거하는 많은 방법이 있습니다. 모든 사람들은 자신의 일을 할 수있는 방법을 가지고 있습니다. – DaImTo

+2

+1 - 나는 어느 쪽이 더 나은지 상관하지 않습니다. 그러나 당신이 속도에 대해 설명하는 것이 중요합니다. 그러나 중요한 것은 내 문제에 대한 해답을 얻었습니다. 이것에 대한 질문을 할 수 있습니다 [Stack Overflow 규칙에 따라야합니다] – SamekaTV

4

Truncate 테이블 사용에 대한 한 가지주의 사항은 명시된 이유로 더 잘 실행됩니다. 그러나 SSIS 시스템 계정에 대한 추가 권한이 필요합니다. 프로덕션에서 사용할 수 있는지 확인해야합니다. 그렇지 않으면 삭제를 사용해야합니다.

MSDN Reference

관련 문제