1. 前言
在MSSQL中,快速导入CSV文件是许多数据处理任务中的一个基本需求。
2. 准备工作
2.1 确认CSV文件格式
在导入CSV文件之前,请确保文件符合MSSQL所要求的格式。我们需要确保CSV文件的列与数据库表中的列匹配,每一行数据都要以回车符或者其他行终止符结束。
2.2 创建数据库表
在导入CSV文件之前,需要先创建一个数据库表来存储CSV数据。通过SQL Server Management Studio或者其他工具,可以方便地创建数据库表。
例如,我们可以创建一个名为“example_table”的数据表,其中包含三个列:id、name和age。
CREATE TABLE example_table (
id INT,
name VARCHAR(50),
age INT
);
2.3 创建格式文件
要导入CSV文件中的数据,需要创建一个格式文件,它描述了CSV文件中数据的格式和位置。
格式文件可以用bcp.exe或者bcp API自动生成,但是,我们也可以手动创建格式文件,在数据格式严格的情况下,这种方法更可靠。
以下是手动创建格式文件的示例:
10.0
3
1 SQLCHAR 0 12 "," 1 id ""
2 SQLCHAR 0 50 "," 2 name SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 12 "\r\n" 3 age ""
该格式文件包含三行,第一行指定了MSSQL版本,第二行指定了列数,第三行指定了每个列的格式、大小和位置。在这个例子中,我们使用了SQLCHAR类型并指定了列的大小、列分隔符和行终止符。
3. 导入CSV文件
3.1 使用bcp命令导入CSV文件
bcp.exe是MSSQL提供的一个命令行工具,它可以快速地导入和导出大量数据。我们可以使用以下命令将CSV文件中的数据导入到“example_table”表:
bcp example_table in C:\data\example.csv -f C:\data\format.fmt -T
在此命令中,“in”表示导入现有文件,后面的参数是CSV文件的路径,“-f”参数是格式文件的路径,“-T”表示使用当前Windows帐户的身份验证。
3.2 使用OPENROWSET导入CSV文件
OPENROWSET语句可以在查询中直接访问外部数据。我们可以使用以下语句将CSV文件中的数据导入到“example_table”表:
INSERT INTO example_table (id, name, age)
SELECT id, name, age
FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\data;
Extended Properties="text;HDR=NO;FMT=Delimited"',
'SELECT * FROM example.csv');
在此例中,我们使用“MSDASQL”作为提供程序,使用Microsoft Text驱动程序连接文本文件,使用文本文件的属性描述CSV文件,并指定表“example_table”将接收导入数据。
3.3 使用bulk insert命令导入CSV文件
BULK INSERT语句是将数据插入表的快速方法,它使用格式文件而不是列列表。我们可以使用以下命令将CSV文件中的数据导入到“example_table”表:
BULK INSERT example_table
FROM 'C:\data\example.csv'
WITH (FORMATFILE = 'C:\data\example.fmt',
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
TABLOCK);
在此命令中,“FIELDTERMINATOR”指定了列分隔符,“ROWTERMINATOR”指定了行终止符。
4. 结论
通过使用bcp.exe、OPENROWSET或者bulk insert,可以轻松地将CSV文件导入到MSSQL数据库中。确保格式文件和CSV文件都具备严格的格式要求,可以避免许多常见的错误和问题。