【问题标题】:SQL: How do I export a table in batches? [closed]SQL:如何批量导出表? [关闭]
【发布时间】:2015-04-20 19:19:58
【问题描述】:

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

【问题讨论】:

  • 您使用的是什么版本的 SQL Server?
  • SQL Server 管理工作室 2012
  • "SQL Server Management Studio 2012" 是一个 SQL 客户端应用程序,可以连接到各种 SQL Server 版本。它不会告诉 Stephan 您正在运行哪个 SQL Server 版本

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


【解决方案1】:

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。我认为最简单的方法是右键单击网格结果的左上角 > 将结果另存为 > file.csv。冲洗并重复每批。这里列出了多种导出 CSV 的方法:Export query result to .csv file in SQL Server 2008

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多