SQL:如何批量导出表?

时间:2015-04-20 19:19:58

标签: sql sql-server tsql batch-processing ssms

我有一个大约200,000条记录的sql表,并希望将其导出到10,000个记录的20个csv文件中。

2 个答案:

答案 0 :(得分:2)

OFFSET AND FETCH仅适用于SQL 2012及更高版本。以下是批量选择数据的方法。

IF OBJECT_ID('tempdb..#yourTable') IS NOT NULL
    DROP TABLE #yourTable;

DECLARE @batchSize INT = 1, --set yours to 10,0000
        @loopCount INT = 0;

SELECT ID,val INTO #yourTable
FROM (VALUES(1,'val1'),(2,'val2'),(3,'val3'),(4,'val4'),(5,'val5')) AS A(ID,val)


WHILE(@loopCount*@batchSize < (SELECT COUNT(*) FROM #yourTable))
BEGIN
    SELECT ID,val FROM #yourTable 
    ORDER BY ID 
    OFFSET (@batchSize * @loopCount) ROWS 
    FETCH NEXT (@batchSize) ROWS ONLY

    SET @loopCount = @loopCount + 1;
END

GO

有多种方法可以导出到CSV。我认为最简单的是右键点击网格结果的左上角&gt;保存结果AS&gt; FILE.CSV。每批冲洗并重复。导出此处列出的CSV的方法有多种:Export query result to .csv file in SQL Server 2008

答案 1 :(得分:1)

我认为,您可以将BIG SELECT查询划分为多个短SELECT查询,然后运行BCP命令生成多个CSV文件。

假设您有BIG SELECT Query SELECT * FROM tblname,它返回200,000条记录,然后将此select语句划分为多条短记录,表示使用主键或使用其他过滤器的10,000条记录。您可以动态生成这些简短查询

SELECT * from tblname Where tblID < 10000

SELECT * from tblname Where tblID BETWEEN 10000 to 20000, and so on

然后使用USE BCP命令生成CSV导出文件

您也可以使用循环动态创建这些简短的SQL查询,然后调用

SELECT @bcp='BCP "'+@sql+'" queryout C:\Export\ExportFile_'+ @filename +'.csv';