2016-09-20 4 views
0

매월 4 백 5 십만 개의 레코드가있는 테이블을 가져 와서 각각 240,000 개의 레코드가있는 .txt 파일로 나눠야하는 월간 프로세스를 실행합니다. SQL Server 2012에서이 코드를 사용하여 파일의 페이징을 만든 다음 SSIS 패키지를 사용하여이 저장 프로 시저를 실행하고 .txt 파일을 만듭니다. @PageNumber를 2로 변경하고 저장 프로 시저를 다시 컴파일하고 SSIS 패키지를 실행합니다. @PageNumber를 3으로 늘리십시오. 레코드가 다 떨어질 때까지 4 백만 건의 레코드가 20x 정도 걸립니다.SSIS를 사용하여 SQL Server에서 여러 텍스트 파일 내보내기

누구든지 코드를 반복하고 @PageNumber 값을 20x 변경하지 않고 한 번에 여러 .txt 파일을 만드는 방법을 알고 있다면 궁금합니다.

CREATE PROCEDURE [dbo].[p_ExportAllDMCSBorrowersPaging] 
AS 
BEGIN 
DECLARE @PageNumber AS INT, @RowspPage AS INT 
SET @PageNumber = 1 
SET @RowspPage = 240000 

SELECT [SSN] 
     ,[DOB] 
     ,[LastName] 
     ,[FirstName] 
     ,[CustomerRecordID] 
     ,[ADDate] 
     ,[MiddleName] FROM (
     SELECT ROW_NUMBER() OVER(ORDER BY ID) AS NUMBER, 
       [SSN] 
       ,[DOB] 
       ,[LastName] 
       ,[FirstName] 
       ,[CustomerRecordID] 
       ,[ADDate] 
       ,[MiddleName] 
     FROM [dbo].[All Borrowers 20160919] 
       ) AS TBL 
     WHERE 
      NUMBER BETWEEN ((@PageNumber - 1) * @RowspPage + 1) AND (@PageNumber * @RowspPage) 
     ORDER BY 
      NUMBER 

답변

1

이 경우 For 루프를 사용합니다.

패키지 변수를 사용하여 테이블의 행 수와 현재 행 카운터를 보유합니다.

는 그 다음에 흐름을 넣어 : (등 페이지 1, 페이지 2 예)

먼저 당신이 반복을 위해 이름을 원하는대로하는 플랫 파일 대상의 연결 문자열을 변경하는 루프에 스크립트를 넣어 For 루프는 카운터 변수를 사용하여 변수 값에서 시작하는 240k 행을 가져옵니다.

루프를 반복 할 때마다 테이블의 행 수를 초과 할 때까지 카운터를 240k 씩 증가시킨 다음 루프를 종료하십시오.

관련 문제