bulk insert 时,数据文件unicode格式报错

yan63 2005-07-06 03:26:07
数据文件:
1#sep#XXX#sep#XXX#sep#XXX#sep#XXX
19#sep#XXX#sep#XXX#sep#XXX#sep#XXX
(XXX)表示字符串

格式文件:
8.0
5
1 SQLINT 0 4 "#sep#" 1 admin_id ""
2 SQLCHAR 0 10 "#sep#" 3 adminname ""
3 SQLCHAR 0 50 "#sep#" 4 email ""
4 SQLCHAR 0 100 "#sep#" 5 telephone ""
5 SQLCHAR 0 100 "\r\n" 6 address ""


use model

BULK INSERT model..adminX FROM 'C:\DataImport\admin.txt'
WITH (

DATAFILETYPE = 'widechar',
FIELDTERMINATOR = '#sep#',
FORMATFILE = 'D:\DataSetReverse\DataImportRule\Format.fmt',
ROWTERMINATOR = '\n',
KEEPNULLS,
TABLOCK
)

表结构:
CREATE TABLE [adminX] (
[admin_id] [int] NULL ,
[userid] [bigint] NULL ,
[adminname] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[e_mail] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[telephone] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[address] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO


错误信息:
服务器: 消息 4832,级别 16,状态 1,行 1
大容量插入: 在数据文件中遇到意外的文件结尾 (EOF)。
服务器: 消息 7399,级别 16,状态 1,行 1
OLE DB 提供程序 'STREAM' 报错。提供程序未给出有关错误的任何信息。
OLE DB 错误跟踪[OLE/DB Provider 'STREAM' IRowset::GetNextRows returned 0x80004005: 提供程序未给出有关错误的任何信息。]。
语句已终止。


若是将数据文件改为ansi格式,则第一列数据变为:
1702044465 ......
1931688241 ......


恳请不吝赐教,谢过先
...全文
762 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
frankwong 2005-07-11
  • 打赏
  • 举报
回复
数据表脚本和格式文件、数据文件发给我试试!
frankstudio@163.com
yan63 2005-07-06
  • 打赏
  • 举报
回复
frankwong(黄梓钿)
若是您还在,请看一下,我重起了机子,错误依然,我执行的是
use model

BULK INSERT model..adminX FROM 'C:\DataImport\admin.txt'
WITH (

DATAFILETYPE = 'widechar',
FIELDTERMINATOR = '#sep#',
FORMATFILE = 'D:\DataSetReverse\DataImportRule\Format.fmt',
ROWTERMINATOR = '\n',
KEEPNULLS,
TABLOCK
)

就是带格式文件的bulk insert
错误还是
服务器: 消息 4832,级别 16,状态 1,行 1
大容量插入: 在数据文件中遇到意外的文件结尾 (EOF)。
服务器: 消息 7399,级别 16,状态 1,行 1
OLE DB 提供程序 'STREAM' 报错。提供程序未给出有关错误的任何信息。
OLE DB 错误跟踪[OLE/DB Provider 'STREAM' IRowset::GetNextRows returned 0x80004005: 提供程序未给出有关错误的任何信息。]。
语句已终止。
yan63 2005-07-06
  • 打赏
  • 举报
回复
frankwong(黄梓钿) 的意见
(格式文件里面的数据类型最好都用SQLCHAR,然后bulk insert到一个临时表,再用语句转换数据类型后再导入正式表,这样比较好)是正解,在下解决了上面的问题一定这样做(特别是SQLCHAR我之前一直都没注意到的)
但是我的数据文件格式检查过多次,现在重起一下机子
若是可以一定马上结贴
谢过~
frankwong 2005-07-06
  • 打赏
  • 举报
回复
在我的机器上执行,除了去掉DATAFILETYPE = 'widechar'这句能完全执行正常,没有其它问题.否则提示:大容量插入: DataFileType 被错误地指定为 widechar。将假定 DataFileType 为 char,因为数据文件没有 Unicode 签名。不过还是能导入数据.
你出现的错误:大容量插入: 在数据文件中遇到意外的文件结尾 (EOF)。我觉得是数据文件格式的问题,包括每一行没有换行回车等.还有,使用bulk insert很久个人觉得,格式文件里面的数据类型最好都用SQLCHAR,然后bulk insert到一个临时表,再用语句转换数据类型后再导入正式表,这样比较好!
yan63 2005-07-06
  • 打赏
  • 举报
回复
没人理,难道在下神憎人厌鬼见愁...
就算是也等...
yan63 2005-07-06
  • 打赏
  • 举报
回复
若是不用格式文件
而数据文件改为
1#sep#2#sep#XXX#sep#XXX#sep#XXX#sep#XXX#sep#3
19#sep#3#sep#XXX#sep#XXX#sep#XXX#sep#XXX#sep#4

执行
use model

BULK INSERT model..adminX FROM 'C:\DataImport\admin.txt'
WITH (
DATAFILETYPE = 'widechar',
FIELDTERMINATOR = '#sep#',
ROWTERMINATOR = '\n',
KEEPNULLS,
TABLOCK
)

结果正常
(所影响的行数为 2 行)

数据也正常

越发地苦恼了....

yan63 2005-07-06
  • 打赏
  • 举报
回复
可怜巴巴地自己顶一下

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧