求助bulk insert 100lcejjj]

发布时间:2017-6-22 22:23:51 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"求助bulk insert 100lcejjj]",主要涉及到求助bulk insert 100lcejjj]方面的内容,对于求助bulk insert 100lcejjj]感兴趣的同学可以参考一下。

我从sql server里面把表导出成文本,其中 行分隔符为{LF},列分隔符为',' 文本限定符 无,成功导出后,我再用 bulk insert  表名   from 已经成功导出的文本文件  with  (    FIELDTERMINATOR = ',',    ROWTERMINATOR = '\r' ) 就报错说   服务器: 消息 4866,级别 17,状态 66,行 1 大容量插入失败。数据文件中第 1 行、第 23 列的列太长。请确保正确地指定了字段终止符和行终止符。 服务器: 消息 7399,级别 16,状态 1,行 1 OLE DB 提供程序 'STREAM' 报错。提供程序未给出有关错误的任何信息。 语句已终止。 我又多次更换行分隔符都出现同样的错误,请问怎么导入类似批量数据 样本数据如下: 为sybase数据库里导出的数据 Jun 28 2006  9:00:00:956AM,110,24,16712710,276021,1,-,6,24,0,Jun 28 2006  9:00:01:700AM,,10,Jun 28 2006  9:00:01:700AM,Jun 28 2006  9:00:01:733AM,17,8564,010900,8,1,0,0,Jun 28 2006  9:00:00:956AM Jun 28 2006  9:00:01:106AM,110,24,16712710,276021,1,-,43,28,0,Jun 28 2006  9:00:02:053AM,,10,Jun 28 2006  9:00:02:053AM,Jun 28 2006  9:00:02:093AM,17,9610,010900,12,1,0,0,Jun 28 2006  9:00:01:106AM Jun 28 2006  9:00:02:143AM,338,24,16712710,2765156,1,-,4,12,0,Jun 28 2006  9:00:02:156AM,,10,Jun 28 2006  9:00:02:156AM,Jun 28 2006  9:00:02:200AM,30,18191,010900,12,1,0,0,Jun 28 2006  9:00:02:143AM

批量插入没有做过,顶

应该跟字段定义的类型相关, 我不知道楼主的表结构. 但我用下面的导入是成功的 USE tempdb CREATE TABLE [tb] (     [col0] VARCHAR(50),     [col1] VARCHAR(50),     [col2] VARCHAR(50),     [col3] VARCHAR(50),     [col4] VARCHAR(50),     [col5] VARCHAR(50),     [col6] VARCHAR(50),     [col7] VARCHAR(50),     [col8] VARCHAR(50),     [col9] VARCHAR(50),     [col10] VARCHAR(50),     [col11] VARCHAR(50),     [col12] VARCHAR(50),     [col13] VARCHAR(50),     [col14] VARCHAR(50),     [col15] VARCHAR(50),     [col16] VARCHAR(50),     [col17] VARCHAR(50),     [col18] VARCHAR(50),     [col19] VARCHAR(50),     [col20] VARCHAR(50),     [col21] VARCHAR(50),     [col22] VARCHAR(50) ) BULK INSERT tb FROM 'c:\a.txt' WITH(    FIELDTERMINATOR = ',',    ROWTERMINATOR = '\r') SELECT * FROM tb

给出详细的表结构

表里面的字段类型全部为varchar(250)呀,邹建老师你的方法在我机器上 用不了呀,不会是我的机器有问题吧。

那也许你的文档格式有问题吧 你看看你的文档的编码使用的是什么编码, 是否文档中有特别的字符. 我是用你给的数据帖到记事本存储为文件的

我也遇到相同的问题. 我要企业管理器中的数据转换服务(DTS)。设置行分隔符为{LF},列分隔符为制表符,可以成功的将TXT文件导入数据库,但是用SQl语句: BULK INSERT hb FROM 'c:\HB1.csv' WITH ( FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n'  ) 却只能导入一行数据,但是只有一条记录,最后一列数据将其他所有行的内容都包括了. 但是用数据转换服务(DTS)就可以将每行作为一条记录插入,应该是行分隔符的定义问题,但是我用了\n \r {LF}} {CR}{LF} 都不行!

换成数据大一点的文件,就提示错误信息: 服务器: 消息 4866,级别 17,状态 66,行 1 大容量插入失败。数据文件中第 1 行、第 18 列的列太长。请确保正确地指定了字段终止符和行终止符。 服务器: 消息 7399,级别 16,状态 1,行 1 OLE DB 提供程序 'STREAM' 报错。提供程序未给出有关错误的任何信息。 OLE DB 错误跟踪[OLE/DB Provider 'STREAM' IRowset::GetNextRows returned 0x80004005:  提供程序未给出有关错误的任何信息。]。 语句已终止。

我的数据文件: 133.1.7.130 rzy tty2 133.1.7.155 start server=acsmanager time=10:11:39 date=06/05/2006 task_id=932 start_time=1149502649 timezone=UTC service=shell 133.1.7.155 rzy tty2 133.1.7.130 start server=acsmanager time=10:13:54 date=06/05/2006 task_id=53 start_time=1149475045 timezone=china service=shell 133.1.7.155 rzy tty2 133.1.7.130 stop server=acsmanager time=10:16:57 date=06/05/2006 task_id=53 start_time=1149475045 timezone=china service=shell disc-cause=1 disc-cause-ext=1020 connect-progress=47 elapsed_time=182 nas-rx-speed=0 nas-tx-speed=0 133.1.7.130 rzy tty2 133.1.7.155 stop server=acsmanager time=10:16:58 date=06/05/2006 task_id=932 start_time=1149502649 timezone=UTC service=shell disc-cause=1 disc-cause-ext=1020 connect-progress=47 elapsed_time=320 nas-rx-speed=0 nas-tx-speed=0 133.1.7.155 rzy tty1 133.1.72.86 stop server=acsmanager time=10:17:00 date=06/05/2006 task_id=52 start_time=1149473973 timezone=china service=shell protocol=telnet addr=133.1.7.66 disc-cause=1 disc-cause-ext=1020 connect-progress=47 elapsed_time=1258 nas-rx-speed=0 nas-tx-speed=0 133.1.7.157 rzy tty1 133.1.72.62 start server=acsmanager time=10:31:33 date=06/05/2006 task_id=2 timezone=UTC service=shell 133.1.7.157 rzy tty1 133.1.72.62 stop server=acsmanager time=10:35:06 date=06/05/2006 task_id=2 timezone=UTC service=shell disc-cause=2 disc-cause-ext=1011 elapsed_time=213 nas-rx-speed=0 nas-tx-speed=0 133.1.7.135 rzy tty1 133.1.72.62 start server=acsmanager time=13:50:59 date=06/05/2006 task_id=34 start_time=1149516618 timezone=UTC service=shell 133.1.7.136 rzy tty1 133.1.7.135 start server=acsmanager time=13:51:29 date=06/05/2006 task_id=32 start_time=1149516583 timezone=UTC service=shell 133.1.7.203 rzy tty1 133.1.7.136 start server=acsmanager time=13:51:47 date=06/05/2006 task_id=94 start_time=1149487950 timezone=China service=shell 133.1.7.204 rzy tty1 133.1.7.203 start server=acsmanager time=13:51:57 date=06/05/2006 task_id=72 start_time=1149487925 timezone=China service=shell 133.1.7.205 rzy tty1 133.1.7.204 start server=acsmanager time=13:52:07 date=06/05/2006 task_id=65 start_time=1149516623 timezone=UTC service=shell 133.1.7.206 rzy tty1 133.1.7.205 start server=acsmanager time=13:52:17 date=06/05/2006 task_id=61 start_time=1149516737 timezone=UTC service=shell

楼主给出的数据有问题嘛.

如果只是按 tab 来做列分割符的话, 楼主的每条记录的列数并不一致. 用bulk当然会出错.

没有数据的列, 列的分割符TAB一定不要省略掉了, 否则导入肯定会错的.

133.1.7.130 rzy tty2 133.1.7.155 start server=acsmanager time=10:11:39 date=06/05/2006 task_id=932 start_time=1149502649 timezone=UTC service=shell 133.1.7.155 rzy tty2 133.1.7.130 start server=acsmanager time=10:13:54 date=06/05/2006 task_id=53 start_time=1149475045 timezone=china service=shell 133.1.7.155 rzy tty2 133.1.7.130 stop server=acsmanager time=10:16:57 date=06/05/2006 task_id=53 start_time=1149475045 timezone=china service=shell disc-cause=1 disc-cause-ext=1020 connect-progress=47 elapsed_time=182 nas-rx-speed=0 nas-tx-speed=0 133.1.7.130 rzy tty2 133.1.7.155 stop server=acsmanager time=10:16:58 date=06/05/2006 task_id=932 start_time=1149502649 timezone=UTC service=shell disc-cause=1 disc-cause-ext=1020 connect-progress=47 elapsed_time=320 nas-rx-speed=0 nas-tx-speed=0 133.1.7.155 rzy tty1 133.1.72.86 stop server=acsmanager time=10:17:00 date=06/05/2006 task_id=52 start_time=1149473973 timezone=china service=shell protocol=telnet addr=133.1.7.66 disc-cause=1 disc-cause-ext=1020 connect-progress=47 elapsed_time=1258 nas-rx-speed=0 nas-tx-speed=0 133.1.7.157 rzy tty1 133.1.72.62 start server=acsmanager time=10:31:33 date=06/05/2006 task_id=2 timezone=UTC service=shell 133.1.7.157 rzy tty1 133.1.72.62 stop server=acsmanager time=10:35:06 date=06/05/2006 task_id=2 timezone=UTC service=shell disc-cause=2 disc-cause-ext=1011 elapsed_time=213 nas-rx-speed=0 nas-tx-speed=0 133.1.7.135 rzy tty1 133.1.72.62 start server=acsmanager time=13:50:59 date=06/05/2006 task_id=34 start_time=1149516618 timezone=UTC service=shell 133.1.7.136 rzy tty1 133.1.7.135 start server=acsmanager time=13:51:29 date=06/05/2006 task_id=32 start_time=1149516583 timezone=UTC service=shell 133.1.7.203 rzy tty1 133.1.7.136 start server=acsmanager time=13:51:47 date=06/05/2006 task_id=94 start_time=1149487950 timezone=China service=shell 133.1.7.204 rzy tty1 133.1.7.203 start server=acsmanager time=13:51:57 date=06/05/2006 task_id=72 start_time=1149487925 timezone=China service=shell 133.1.7.205 rzy tty1 133.1.7.204 start server=acsmanager time=13:52:07 date=06/05/2006 task_id=65 start_time=1149516623 timezone=UTC service=shell 133.1.7.206 rzy tty1 133.1.7.205 start server=acsmanager time=13:52:17 date=06/05/2006 task_id=61 start_time=1149516737 timezone=UTC service=shell

USE tempdb CREATE TABLE [tb] (     [col0] VARCHAR(50),     [col1] VARCHAR(50),     [col2] VARCHAR(50),     [col3] VARCHAR(50),     [col4] VARCHAR(50),     [col5] VARCHAR(50),     [col6] VARCHAR(50),     [col7] VARCHAR(50),     [col8] VARCHAR(50),     [col9] VARCHAR(50),     [col10] VARCHAR(50),     [col11] VARCHAR(50),     [col12] VARCHAR(50),     [col13] VARCHAR(50),     [col14] VARCHAR(50),     [col15] VARCHAR(50),     [col16] VARCHAR(50),     [col17] VARCHAR(50),     [col18] VARCHAR(50),     [col19] VARCHAR(50),     [col20] VARCHAR(50),     [col21] VARCHAR(50),     [col22] VARCHAR(500) ) BULK INSERT tb FROM 'c:\a.txt' --WITH( --   FIELDTERMINATOR = '{t}', --   ROWTERMINATOR = '{CR}{LF}') SELECT * FROM tb GO DROP TABLE tb

上面是我修改后的数据, 及能成功导入数据的处理语句. 注意, 我的数据与楼主的不同的是, 在某些记录的后面多加了 tab 键

大数据插入用BCP啊,这个很好用的了,

我用下面语句: BULK INSERT hb FROM 'c:\060704.txt' WITH (    DATAFILETYPE = 'char',    FIELDTERMINATOR = '\t',    ROWTERMINATOR = '0x0a' ) 可以成功导入数据101行. 用数据转换服务(DTS)却有189行.比较两次导入的数据行发现,因为文本数据中,有些行的后几列有为空字段,用DTS可以自动补成null,但是用BULK INSERT就自动用下一行补齐了,所以他插入的行就少一些. 现在请教如何处理这个问题呢?

最后问题解决啦,我把文本文件里面的行分隔符粘出来,语句如下,就可以,不知道邹建老师能不能给个解释, bulk insert  表名   from 已经成功导出的文本文件  with  (    FIELDTERMINATOR = ',',    ROWTERMINATOR = ' ' ), 其中,行分隔符现在看不到,在文本里面却是一个黑色的方块.

问题没有得到彻底解决,还是给结贴吧

上一篇:¥¥¥¥¥¥¥¥¥:可能安装2个版本的2005么?? 20Deflower_Robber]
下一篇:在等待!!!!!!!!如何存储图像数据 20CSDN]

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。