使用bcp将csv文件导入sql 2005或2008

Mic*_*elD 6 sql t-sql bcp sql-server-2005 sql-server-2008

我有一个csv文件,我需要将它导入到sql 2005或2008中的表中.csv中的列名和计数与表列名和计数不同.csv被';'拆分 .

例

CSV FILE内容:

FirstName;LastName;Country;Age
Roger;Mouthout;Belgium;55
Run Code Online (Sandbox Code Playgroud)

SQL人员表

Columns: FName,LName,Country
Run Code Online (Sandbox Code Playgroud)

edo*_*oft 9

使用bcp导入时可以使用格式文件:

为您的表创建一个格式文件:

 bcp [table_name] format nul -f [format_file_name.fmt] -c -T 



 9.0
4
1       SQLCHAR       0       100     ","      1     FName             SQL_Latin1_General_CP1_CI_AS
2       SQLCHAR       0       100     ","      2     LName             SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR       0       100     ","      3     Country           SQL_Latin1_General_CP1_CI_AS
4       SQLCHAR       0       100     "\r\n"   0     Age               SQL_Latin1_General_CP1_CI_AS
Run Code Online (Sandbox Code Playgroud)

编辑导入文件.诀窍是为要跳过的字段添加虚拟行,并添加"0"作为服务器列顺序.

然后使用此格式文件导入数据,指定输入文件,此格式文件和分隔符:

bcp [table_name] in [data_file_name] -t , -f [format_file_name.fmt] -T
Run Code Online (Sandbox Code Playgroud)


Dan*_*edy 9

我创建了一个临时表,批量插入该批次,在新表中选择您需要的内容并删除临时表.

就像是

CREATE TABLE dbo.TempImport
(
    FirstName varchar(255),
    LastName varchar(255),
    Country varchar(255),
    Age varchar(255)
)
GO
BULK INSERT dbo.TempImport FROM 'PathToMyTextFile' WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n')
GO
INSERT INTO dbo.ExistingTable
(
    FName,
    LName,
    Country
)
SELECT  FirstName,
       LastName,
       Country
FROM       dbo.TempImport
GO
DROP TABLE dbo.TempImport
GO
Run Code Online (Sandbox Code Playgroud)

  • 问题标题是如何使用BCP工具,而不是批量插入,虽然这可能是大多数情况下的正确答案,批量插入对bcp工具没有的行数和字段数有一些限制. (8认同)