关于BCP方面的一个难题 稍难点的问题就没人答了,简单的问题大家抢着答,这就是CSDN 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以定义schema.ini格式文件,然后用opendatasouce读入指定字段。schema.ini格式大致如下:[data.txt]ColNameHeader = TrueCharacterSet = ANSIFormat = TabDelimitedCol1=rkey Text width 10 Col2=prodid Text width 10Col3=price Text width 10.............关于schema.ini的详细信息,参看http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcjetschema_ini_file.asp 当按照你的实际情况定义好schema.ini后:insert 表(字段1,字段2,字段3)select 字段4,字段6,字段46from opendatasource('MICROSOFT.JET.OLEDB.4.0','Text;HDR=Yes;DATABASE=C:\')...[data#txt] 按照楼主说的应该是不可以从那个原始的数据文件中直接导入数据库的,因为不论采用什么办法(bcp命令行工具,或者是基于odbc、db-lirary的bcp接口函数)都无法识别文件中的第一行字段头。我的想法是楼主需要想办法(手工的或者程序处理的办法)把第一行字段头删除,然后再使用bcp命令行或者调用bcp接口函数把处理后的数据文件倒入到数据库中。假如楼主觉得我说的有些道理这几天我们可以继续深入讨论一下,这段时间我经常使用bcp(包括使用命令行工具和通过程序调用基于db-library的bcp接口函数)导入/导出数据,希望能和你交流经验。 我QQ 395137258,一般晚上在线,你到时加我好吗,注明:CSDN即可 搂主很抱歉啊,我平时不是很容易上网的,所以没办法在qq上面和你联系。你说的问题如果不想编写程序解决问题的话,那么使用命令行的方式的bcp是可以解决的,那样的话需要你自己编写bcp格式文件(.fmt文件),按照格式文件的内容就可以导入指定的列到数据库中。你可以参考一下sql server的联机帮助,那个上面有详细的bcp的fmt格式文件的编写方法和使用方法,操作起来也不是很复杂的,我希望能帮助你解决问题。如果你还有什么疑问的话,可以在这里发帖,我尽量及时回复。 谢谢诸位,现在没给分是因为我准备国庆时一起给分,信誉低是因为偶有段时间没来,结果CSDN强行结贴了 那段时间偶在北京培训J2EE,没条件上网 我看了下SQL SERVER的帮助,根据我的实际情况,要导入的文本文件中存在80个字段,而我只想要其中的14个字段,我先建了个临时表,列名分别为Col+我想要的字段在文本文件中的顺序,字段类型全为VARCHAR(255),然后我写了下面的fmt文件:8.0141 SQLCHAR 0 255 "\t" 1 Col001 Chinese_PRC_CS_AS 2 SQLCHAR 0 255 "\t" 2 Col002 Chinese_PRC_CS_AS3 SQLCHAR 0 255 "\t" 3 Col003 Chinese_PRC_CS_AS6 SQLCHAR 0 255 "\t" 4 Col006 Chinese_PRC_CS_AS7 SQLCHAR 0 255 "\t" 5 Col007 Chinese_PRC_CS_AS8 SQLCHAR 0 255 "\t" 6 Col008 Chinese_PRC_CS_AS9 SQLCHAR 0 255 "\t" 7 Col009 Chinese_PRC_CS_AS10 SQLCHAR 0 255 "\t" 8 Col010 Chinese_PRC_CS_AS11 SQLCHAR 0 255 "\t" 9 Col011 Chinese_PRC_CS_AS12 SQLCHAR 0 255 "\t" 10 Col012 Chinese_PRC_CS_AS50 SQLCHAR 0 255 "\t" 11 Col050 Chinese_PRC_CS_AS54 SQLCHAR 0 255 "\t" 12 Col054 Chinese_PRC_CS_AS55 SQLCHAR 0 255 "\t" 13 Col055 Chinese_PRC_CS_AS66 SQLCHAR 0 255 "\t" 14 Col066 Chinese_PRC_CS_AS随后我使用bulk insert test2..import from 'c:\import.txt' with (FORMATFILE='c:\bcp.fmt')进行导入,但是出现错误信息如下:服务器: 消息 4823,级别 16,状态 1,行 1未能进行大容量插入。格式化文件 'c:\bcp.fmt' 中的列号无效。我一下未能找出原因,看看列号好像也没错,请大家再帮我看下吧 我想应该是数据文件的格式造成的上述问题,你先试试通过你的fmt文件导入前12列行不行。如果还是不行的话,先建个临时表然后把整个文件的内容都导进去,看看你现在制定的每一列的前缀和后缀字符是不是有问题,从你的错误提示来看我觉得很有可能是sql server没有正确识别每一列的分割而引起的。 通过一些简单的SQL编程,采用Bulk Insert处理就行了。但是不知道如何忽略一行。 求SQL语句,WHERE条件再做判断 触发可以实现这样的功能吗? 求助简单问题! count(id) 查询没有办法用inner join吗? 如何只更新N条相同记录中的一条 从数据类型 varchar 转换为 float 时出错,在线等 高分救助 与“无效的描述符索引”有关 急问!!!!sqlserver里中文字符的ASC编码范围是多少啊? 我想实现定期将数据库中的数据都倒出来,该怎么做呢? 根据表有几行在报表显示成一行 请教SQL函数,求得“开发间接费\其他”、“坏账准备\房产公司\其他应收款”等字符串最右边的子串???????????? sql server工具??
ColNameHeader = True
CharacterSet = ANSI
Format = TabDelimited
Col1=rkey Text width 10
Col2=prodid Text width 10
Col3=price Text width 10
.............关于schema.ini的详细信息,参看
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcjetschema_ini_file.asp
select 字段4,字段6,字段46
from opendatasource('MICROSOFT.JET.OLEDB.4.0','Text;HDR=Yes;DATABASE=C:\')...[data#txt]
我的想法是楼主需要想办法(手工的或者程序处理的办法)把第一行字段头删除,然后再使用bcp命令行或者调用bcp接口函数把处理后的数据文件倒入到数据库中。
假如楼主觉得我说的有些道理这几天我们可以继续深入讨论一下,这段时间我经常使用bcp(包括使用命令行工具和通过程序调用基于db-library的bcp接口函数)导入/导出数据,希望能和你交流经验。
你说的问题如果不想编写程序解决问题的话,那么使用命令行的方式的bcp是可以解决的,那样的话需要你自己编写bcp格式文件(.fmt文件),按照格式文件的内容就可以导入指定的列到数据库中。你可以参考一下sql server的联机帮助,那个上面有详细的bcp的fmt格式文件的编写方法和使用方法,操作起来也不是很复杂的,我希望能帮助你解决问题。
如果你还有什么疑问的话,可以在这里发帖,我尽量及时回复。
8.0
14
1 SQLCHAR 0 255 "\t" 1 Col001 Chinese_PRC_CS_AS
2 SQLCHAR 0 255 "\t" 2 Col002 Chinese_PRC_CS_AS
3 SQLCHAR 0 255 "\t" 3 Col003 Chinese_PRC_CS_AS
6 SQLCHAR 0 255 "\t" 4 Col006 Chinese_PRC_CS_AS
7 SQLCHAR 0 255 "\t" 5 Col007 Chinese_PRC_CS_AS
8 SQLCHAR 0 255 "\t" 6 Col008 Chinese_PRC_CS_AS
9 SQLCHAR 0 255 "\t" 7 Col009 Chinese_PRC_CS_AS
10 SQLCHAR 0 255 "\t" 8 Col010 Chinese_PRC_CS_AS
11 SQLCHAR 0 255 "\t" 9 Col011 Chinese_PRC_CS_AS
12 SQLCHAR 0 255 "\t" 10 Col012 Chinese_PRC_CS_AS
50 SQLCHAR 0 255 "\t" 11 Col050 Chinese_PRC_CS_AS
54 SQLCHAR 0 255 "\t" 12 Col054 Chinese_PRC_CS_AS
55 SQLCHAR 0 255 "\t" 13 Col055 Chinese_PRC_CS_AS
66 SQLCHAR 0 255 "\t" 14 Col066 Chinese_PRC_CS_AS
随后我使用bulk insert test2..import from 'c:\import.txt' with (FORMATFILE='c:\bcp.fmt')进行导入,但是出现错误信息如下:服务器: 消息 4823,级别 16,状态 1,行 1
未能进行大容量插入。格式化文件 'c:\bcp.fmt' 中的列号无效。
我一下未能找出原因,看看列号好像也没错,请大家再帮我看下吧
如果还是不行的话,先建个临时表然后把整个文件的内容都导进去,看看你现在制定的每一列的前缀和后缀字符是不是有问题,从你的错误提示来看我觉得很有可能是sql server没有正确识别每一列的分割而引起的。
但是不知道如何忽略一行。