我有一个大约200,000条记录的sql表,并希望将其导出到10,000个记录的20个csv文件中。
答案 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';