使用格式化文件批量插入 CSV 文件
Bulk Insert CSV File Using Format File
我正在尝试使用批量插入和格式化文件将 CSV 文件插入 SQL 数据库,但我遇到了一些问题。我一直在使用下面的教程。
http://www.bidn.com/blogs/marcoadf/bidn-blog/2479/bulk-insert-format-file-skip-column
当我 运行 脚本出现此错误时,我认为它与格式文件的格式有关。
Msg 4863, Level 16, State 1, Line 3
Bulk load data conversion error (truncation) for row 2, column 3 (Ref).
Msg 7399, Level 16, State 1, Line 3
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 3
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".
Table格式
[Id] INT NULL,
[Name] NVARCHAR (50) NULL,
[Townland] NVARCHAR (100) NULL,
[Ref] INT NULL,
[Lat] FLOAT (53) NULL,
[Lng] FLOAT (53) NULL
TSQL
use HOM
go
bulk insert HouseInfo
from 'c:\HOM\Houses_of_Mayo_02_02_2015.txt'
with
(
firstrow = 2,
fieldterminator = ',',
FORMATFILE = 'c:\HOM\Format_File.fmt'
)
select *
from HouseInfo
格式化文件
10.0
6
1 SQLINT 0 50 "," 2 Id ""
2 SQLNCHAR 0 50 "," 3 Name ""
3 SQLNCHAR 0 100 "," 4 Townland ""
4 SQLINT 0 50 "," 5 Ref ""
5 SQLFLT8 0 53 "," 6 Lat ""
6 SQLFLT8 0 53 "\n" 7 Lng ""
CSV 文件
Id,Name,Townland,Ref,Lat,Lng
A1,Aasleagh Lodge,Srahatloe,1,53.613873,-9.668301
A2,Aasleagh Rectory,Srahatloe,2,53.612478,-9.668033
A3,Abbey Lodge,Carrowkeel (ED Croaghpatrick),3,53.785667,-9.638768
A4,Abbeytown House,Abbeytown,4,54.107701,-9.318194
以下是我注意到您上面的代码中的一些错误。
Id
是 INT
类型,但是 csv 中的数据对于此列 A1,A2...
- 在您的格式文件中,数据库列顺序从 2 而不是 1 开始。
不需要格式文件,没有格式文件可以直接使用fieldterminator = ',',rowterminator='\n'
bulk insert HouseInfo
from 'E:\bcp\Houses_of_Mayo_02_02_2015.txt'
with
(
firstrow = 2,
fieldterminator = ',',rowterminator='\n'
)
select *
from HouseInfo
我正在尝试使用批量插入和格式化文件将 CSV 文件插入 SQL 数据库,但我遇到了一些问题。我一直在使用下面的教程。
http://www.bidn.com/blogs/marcoadf/bidn-blog/2479/bulk-insert-format-file-skip-column
当我 运行 脚本出现此错误时,我认为它与格式文件的格式有关。
Msg 4863, Level 16, State 1, Line 3
Bulk load data conversion error (truncation) for row 2, column 3 (Ref).
Msg 7399, Level 16, State 1, Line 3
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 3
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".
Table格式
[Id] INT NULL,
[Name] NVARCHAR (50) NULL,
[Townland] NVARCHAR (100) NULL,
[Ref] INT NULL,
[Lat] FLOAT (53) NULL,
[Lng] FLOAT (53) NULL
TSQL
use HOM
go
bulk insert HouseInfo
from 'c:\HOM\Houses_of_Mayo_02_02_2015.txt'
with
(
firstrow = 2,
fieldterminator = ',',
FORMATFILE = 'c:\HOM\Format_File.fmt'
)
select *
from HouseInfo
格式化文件
10.0
6
1 SQLINT 0 50 "," 2 Id ""
2 SQLNCHAR 0 50 "," 3 Name ""
3 SQLNCHAR 0 100 "," 4 Townland ""
4 SQLINT 0 50 "," 5 Ref ""
5 SQLFLT8 0 53 "," 6 Lat ""
6 SQLFLT8 0 53 "\n" 7 Lng ""
CSV 文件
Id,Name,Townland,Ref,Lat,Lng
A1,Aasleagh Lodge,Srahatloe,1,53.613873,-9.668301
A2,Aasleagh Rectory,Srahatloe,2,53.612478,-9.668033
A3,Abbey Lodge,Carrowkeel (ED Croaghpatrick),3,53.785667,-9.638768
A4,Abbeytown House,Abbeytown,4,54.107701,-9.318194
以下是我注意到您上面的代码中的一些错误。
Id
是INT
类型,但是 csv 中的数据对于此列A1,A2...
- 在您的格式文件中,数据库列顺序从 2 而不是 1 开始。
不需要格式文件,没有格式文件可以直接使用fieldterminator = ',',rowterminator='\n'
bulk insert HouseInfo
from 'E:\bcp\Houses_of_Mayo_02_02_2015.txt'
with
(
firstrow = 2,
fieldterminator = ',',rowterminator='\n'
)
select *
from HouseInfo