首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速转储Server表

快速转储Server表
EN

Stack Overflow用户
提问于 2012-03-14 23:00:43
回答 3查看 2.8K关注 0票数 2

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

  1. 有比SQL查询更快加载数据的API吗?我发现有一个本机导入API IRowsetFastLoad。但在出口方面运气不佳。
  2. BCP本机格式有API吗?我找不到任何关于本机bcp文件格式的文档。
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-15 00:01:21

来自泡泡

-n

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

数十亿排?然后,您还需要使用:

-b batch_size

指定每批复制的数据的行数。每个批处理作为一个事务复制到服务器。Server在失败时提交或回滚每个批处理的事务。

您不能同时访问这两个数据库吗?也许可以通过链接服务器访问?这会让事情变得更简单。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2012-03-15 06:01:24

大容量插入API通过SqlBulkCopy类向程序员公开:

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

票数 0
EN

Stack Overflow用户

发布于 2014-03-06 11:34:36

使用bcp实用程序( Server)导入和导出大容量数据

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

批量复制功能参考:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9711613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档