【问题标题】:bulk insert isn't working reading .txt file into SQL Server批量插入无法将 .txt 文件读入 SQL Server
【发布时间】:2013-10-12 18:48:08
【问题描述】:

我正在使用批量插入将文本文件读入 SQL Server 表。当我尝试使用批量插入时,我总是遇到同样的错误,即使我取文本文件的第一行,并将值复制到一个普通的旧插入语句中,一切正常。我的数据库 stop_times 设置如下:

train_num int,
arrival_time time,
dept_time time,
station_name varchar(50),
seq_num, int

我的 .txt 文件格式如下

 101,'04:30:00','04:30:00','San Jose',1
 101,'04:35:00','04:35:00','Santa Clara',2
 101,'04:40:00','04:40:00','Lawrence',3

跑步

 bulk insert dbo.stop_times
 from 'C:\Users\amanda\Desktop\stop_times1.txt'
 with(
     FIELDTERMINATOR=','
 )

给我

消息 4864,第 16 级,状态 1,第 1 行
第 1 行第 1 列 (train_num) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。
消息 4864,第 16 级,状态 1,第 1 行
第 2 行第 2 列 (arrival_time) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。
消息 4864,第 16 级,状态 1,第 1 行
第 3 行第 2 列 (arrival_time) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

但是,将第一行复制并粘贴到

insert into stop_times(train_num, arrival_time, dept_time, station_name, seq_num)
values (101, '04:30:00', '04:30:00', 'San Jose', 1); 

有效。我觉得我在批量插入功能中遗漏了一些完全明显的东西,但我一无所知。

【问题讨论】:

标签: sql-server tsql sql-server-2012


【解决方案1】:

试试这个

 bulk insert dbo.stop_times
 from 'C:\Users\amanda\Desktop\stop_times1.txt'
 with(
     FIELDTERMINATOR=',',
     ROWTERMINATOR = '\n'
 )

如果你在第一行有列名,你需要做这样的事情

 bulk insert dbo.stop_times
 from 'C:\Users\amanda\Desktop\stop_times1.txt'
 with(
     FIELDTERMINATOR=',',
     ROWTERMINATOR = '\n',
     FIRSTROW = 2

 )

【讨论】:

  • 提示并确保在运行此查询之前您尝试导入的文件未在其他任何地方打开
  • 我已确定文件已关闭,并使用 ROWTERMINATOR 重新运行。我仍然收到这些错误(甚至为 ROWTERMINATOR 尝试了 '\r\n')
  • 你试过只用'\n'吗?你能告诉我你试图插入这些记录的列的数据类型是什么,以及其中大约有多少条记录.txt 文件。
  • 数据类型从左到右依次为int、time、time、varchar(50)和int。文本文件中有 2275 行。只需使用'\n'。所以,我刚才试着读了一行,去掉了当时的引号。那是问题吗?出于某种原因,我认为时代应该有引号。
  • 它是因为当您将带有“your_data”的数据批量插入时间列时,sql server 将其视为字符串数据类型 varchar/nvarchar,这就是它抛出错误的原因。
猜你喜欢
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 2016-03-02
  • 2010-09-24
  • 1970-01-01
相关资源
最近更新 更多