更详细的参数,请参考:https://msdn.microsoft.com/zh-cn/library/ms162802%28v=sql.105%29.aspx
2. 实践
2.1 导出数据
介绍完BCP的导出导入,以及BULK INSERT的导入,下面进行一些实际的操作。为了接近实际环境,创建一张10个字段的表,包含有几种常用的数据类型,构造2000万的数据,包含中文和英文。为了更快插入测试数据,先不创建索引。在执行下面代码之前,请留意下数据库的日志恢复模式是否设置为大容量模式或简单模式,以及磁盘空间是否足够(我的实践中,数据生成后数据文件和日志文件大概需要40G的空间)。
USE AdventureWorks2008R2
GO
IF OBJECT_ID(N'T1') IS NOT NULL
BEGIN
DROP TABLE T1
END
GO
CREATE TABLE T1 (
id_INT,
col_1NVARCHAR(50),
col_2NVARCHAR(40),
col_3NVARCHAR(40),
col_4NVARCHAR(40),
col_5INT,
col_6FLOAT,
col_7DECIMAL(18,8),
col_8BIT,
input_dateDATETIME DEFAULT(GETDATE())
)
GO
WITH CTE1 AS (
SELECT a.[object_id] FROM master.sys.all_objects AS a,master.sys.all_objects AS b,sys.databases AS c
WHERE c.database_id <= 5
)
,CTE2AS (
SELECT ROW_NUMBER() OVER (ORDER BY [object_id]) as row_no FROM CTE1
)
INSERT INTO T1 (id_,col_1,col_2,col_3,col_4,col_5,col_6,col_7,col_8)
SELECT row_no,REPLICATE(N'博客园',10),NEWID(),NEWID(),NEWID(),CAST(row_no * RAND() * 10 AS INT),row_no * RAND(),row_no * RAND(),CAST(row_no * RAND() AS INT) % 2
FROM CTE2 WHERE row_no <= 20000000
GO
code-6