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