快速转储SQL Server表

时间:2012-03-14 23:00:44

标签: sql-server bcp

我在SQL Server 2008 R2中有一个大表。它包含数十亿行。我需要在我们的应用程序中加载整个数据集。查询整个表非常慢。我想使用bcp将其转储到文件中并加载它。但问题是有字符串列它包含各种特殊字符,如'\ t','\ 0',逗号和'\ n'。我找不到一个好的字段/行终止符。但是长字符串终止符会减慢我的应用程序的数据文件加载速度。问题是:

  1. 是否有任何API加载数据的速度比SQL查询快?我发现有一个本机导入API IRowsetFastLoad。但出口并不幸运。
  2. BCP原生格式是否有任何API?我找不到任何关于本机bcp文件格式的文档。

3 个答案:

答案 0 :(得分:1)

来自BOL

-n

使用数据的本机(数据库)数据类型执行批量复制操作。此选项不会提示每个字段;它使用原生值。

数十亿行?然后你还想使用:

-b batch_size

指定每批复制数据的行数。每个批次都作为一个事务复制到服务器。在发生故障的情况下,SQL Server会为每个批处理提交或回滚事务。

您是否无法一次访问这两个数据库,可能是通过链接服务器?这会让事情变得更容易。

DECLARE @StartId BIGINT
DECLARE @NmbrOfRecords BIGINT
DECLARE @RowCount BIGINT

SET @StartId = 0
SET @NmbrOfRecords = 9999
SET @RowCount = 1

WHILE @RowCount > 0
BEGIN
  BEGIN TRANSACTION

  INSERT INTO DestinationDatabase.dbo.Mytable
  SELECT * FROM SourceDatabase.dbo.Mytable
  WHERE ID BETWEEN @StartId AND @StartId + @NmbrOfRecords

  SET @RowCount = @@ROWCOUNT

  SET @StartId = @StartId + @NmbrOfRecords + 1

  COMMIT TRANSACTION
END

答案 1 :(得分:0)

Bulk Insert API由SqlBulkCopy类向程序员公开:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx

答案 2 :(得分:0)

使用bcp实用程序(SQL Server)

导入和导出批量数据

http://technet.microsoft.com/en-us/library/aa337544.aspx

批量复制功能参考:

http://technet.microsoft.com/en-us/library/ms130922.aspx

相关问题