我需要读取包含许多记录的.csv文件中的数据,但是在最后一行 有字符串“the_end”,之后没有LF符号。
这是我的csv文件:
1,James,Smith,19750101
2,Meggie,Smith,19790122
3,Robert,Smith,20071101
4,Alex,Smith,20040202
the_end
在我的sql脚本下面,它将数据读入临时表:
create table #Data
(
id int,
first_name varchar(50),
last_name varchar(50),
birthdate smalldatetime
)
bulk insert #Data
from 'C:\Users\Michał\Desktop\csvtest.csv'
with
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
select * from #Data
drop table #Data
错误是:
Msg 4832,Level 16,State 1,Line 13
的行
批量加载:数据文件中遇到意外的文件结尾。
Msg 7399,Level 16,State 1,Line 13
链接服务器“(null)”的OLE DB提供程序“BULK”报告错误。提供者没有提供有关错误的任何信息。
Msg 7330,Level 16,State 2,Line 13
无法从OLE DB提供程序“BULK”获取链接服务器“(null)”。
我想在没有最后一行标签“the_end”的情况下将所有数据读入我的表格,这是显而易见的。我该如何管理?我无法修改此文件,因为它是从外部提供的,我不能这样做。
答案 0 :(得分:2)
bulk insert #Data
from 'C:\Users\Michał\Desktop\csvtest.csv'
with
(
FIELDTERMINATOR = ','
, ROWTERMINATOR = '\n'
, lastrow = 4
)
使用变量作为lastline的动态sql示例:
create table #Data (
id int
, first_name varchar(50)
, last_name varchar(50)
, birthdate smalldatetime
);
declare @lastline int = 4;
declare @sql nvarchar(max)= '
bulk insert #Data
from ''C:\Users\Michał\Desktop\csvtest.csv''
with (
FIELDTERMINATOR = '',''
, ROWTERMINATOR = ''\n''
, lastrow = '+convert(nvarchar(11),@lastline)+'
);';
exec sp_executesql @sql;
select * from #Data
drop table #Data
答案 1 :(得分:0)
如果lastrow选项对您不起作用,请手动删除最后一行并尝试重新运行BulkLoad进程。如果一切正常,请创建VB.NET可执行文件以打开文件,删除最后一行,然后重新保存文件。可以使用Windows任务计划程序安排删除最后一行进程和BulkLoad进程。
https://www.sevenforums.com/tutorials/11949-elevated-program-shortcut-without-uac-prompt-create.html