稍难点的问题就没人答了,简单的问题大家抢着答,这就是CSDN

解决方案 »

  1.   

    你可以定义schema.ini格式文件,然后用opendatasouce读入指定字段。schema.ini格式大致如下:[data.txt]
    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
      

  2.   

    当按照你的实际情况定义好schema.ini后:insert 表(字段1,字段2,字段3)
    select 字段4,字段6,字段46
    from opendatasource('MICROSOFT.JET.OLEDB.4.0','Text;HDR=Yes;DATABASE=C:\')...[data#txt]
      

  3.   

    按照楼主说的应该是不可以从那个原始的数据文件中直接导入数据库的,因为不论采用什么办法(bcp命令行工具,或者是基于odbc、db-lirary的bcp接口函数)都无法识别文件中的第一行字段头。
    我的想法是楼主需要想办法(手工的或者程序处理的办法)把第一行字段头删除,然后再使用bcp命令行或者调用bcp接口函数把处理后的数据文件倒入到数据库中。
    假如楼主觉得我说的有些道理这几天我们可以继续深入讨论一下,这段时间我经常使用bcp(包括使用命令行工具和通过程序调用基于db-library的bcp接口函数)导入/导出数据,希望能和你交流经验。
      

  4.   

    我QQ 395137258,一般晚上在线,你到时加我好吗,注明:CSDN即可
      

  5.   

    搂主很抱歉啊,我平时不是很容易上网的,所以没办法在qq上面和你联系。
    你说的问题如果不想编写程序解决问题的话,那么使用命令行的方式的bcp是可以解决的,那样的话需要你自己编写bcp格式文件(.fmt文件),按照格式文件的内容就可以导入指定的列到数据库中。你可以参考一下sql server的联机帮助,那个上面有详细的bcp的fmt格式文件的编写方法和使用方法,操作起来也不是很复杂的,我希望能帮助你解决问题。
    如果你还有什么疑问的话,可以在这里发帖,我尽量及时回复。
      

  6.   

    谢谢诸位,现在没给分是因为我准备国庆时一起给分,信誉低是因为偶有段时间没来,结果CSDN强行结贴了
      

  7.   

    那段时间偶在北京培训J2EE,没条件上网
      

  8.   

    我看了下SQL SERVER的帮助,根据我的实际情况,要导入的文本文件中存在80个字段,而我只想要其中的14个字段,我先建了个临时表,列名分别为Col+我想要的字段在文本文件中的顺序,字段类型全为VARCHAR(255),然后我写了下面的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' 中的列号无效。
    我一下未能找出原因,看看列号好像也没错,请大家再帮我看下吧
      

  9.   

    我想应该是数据文件的格式造成的上述问题,你先试试通过你的fmt文件导入前12列行不行。
    如果还是不行的话,先建个临时表然后把整个文件的内容都导进去,看看你现在制定的每一列的前缀和后缀字符是不是有问题,从你的错误提示来看我觉得很有可能是sql server没有正确识别每一列的分割而引起的。
      

  10.   

    通过一些简单的SQL编程,采用Bulk Insert处理就行了。
    但是不知道如何忽略一行。