使用SSIS在SQL Server中导出多个文本文件

时间:2016-09-20 18:22:57

标签: sql-server tsql ssis sql-server-2012

我运行一个月度流程,要求我拿一张包含4-5百万条记录的表格,并将其分成每个240,000条记录的.txt文件。我在SQL Server 2012中使用此代码来创建文件的分页,然后使用SSIS包来运行此存储过程并创建.txt文件。我将@PageNumber更改为2,重新编译存储过程,运行SSIS包。将@PageNumber增加到3,依此类推,直到我用完400条记录大约20倍的记录。

我想知道是否有人知道如何循环访问代码并在一次传递中创建多个.txt文件而无需将@PageNumber值更改为20x?

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 个答案:

答案 0 :(得分:2)

我会使用For循环。

使用包变量来保存表和当前行计数器中的行数。

首先在循环中放入一个脚本,将您的平面文件目标的连接字符串更改为您要为该迭代命名的任何内容(例如:Page1,Page2等)

然后在For循环中放入一个使用计数器变量的数据流,从变量的值开始获取240k行。

在循环的每次迭代之后,将计数器递增240k,直到它超过表中的行数,然后退出循环。