我把文本文件(来源于UCI)用SQL的“导入数据”功能导入后,SQL数据库中表的每一列类型都是VARCHAR型,请问这是怎么回事?怎样才能使导入后的表有正常的数据格式,比如int,float等?
多谢指点!

解决方案 »

  1.   

    先生成格式文件(运行不带-c参数的BCP得到),
    然后运行BCP 带上:-f format_file指定格式文件的完整路径,该格式文件包含以前在同一个表或视图上使用 bcp 时的存储响应。当使用由 format 选项所创建的格式文件大容量复制入或复制出数据时,使用此选项。格式文件的创建是可选的。在提示几个格式问题之后,bcp 将提示是否在格式文件中保存回答。默认文件名为 Bcp.fmt。大容量复制数据时,bcp 可引用一个格式文件,因此不必重新交互输入以前的回答。如果未使用此选项,也没有指定 –n、-c、-w、-6 或 -N,则 bcp 将提示输入格式信息。
      

  2.   

    先生成格式文件(运行不带-c参数的BCP得到),
    然后运行BCP 带上:-f format_file指定格式文件的完整路径,该格式文件包含以前在同一个表或视图上使用 bcp 时的存储响应。当使用由 format 选项所创建的格式文件大容量复制入或复制出数据时,使用此选项。格式文件的创建是可选的。在提示几个格式问题之后,bcp 将提示是否在格式文件中保存回答。默认文件名为 Bcp.fmt。大容量复制数据时,bcp 可引用一个格式文件,因此不必重新交互输入以前的回答。如果未使用此选项,也没有指定 –n、-c、-w、-6 或 -N,则 bcp 将提示输入格式信息。什么是BCP?怎么你说的我一点看不懂啊
      

  3.   

    刚才又试了一下,可以手动转换数据类型
    那请问一下,SQL SERVER  对文本文件的数据导入时能不能自动转换类型?
      

  4.   

    如果是sql 2005, 则导入的时候源数据类型选择"平面文件源", 然后在数据源的高级设置中, 可以为每个列设置列名及类型.
    2000似乎只有导入后再调整, 或者是自己先建表
      

  5.   

    楼主可以试使用BULK INSERT的方法,如:
    BULK INSERT JieYi_B..Test FROM 'c:\test.txt'
    WITH (
       DATAFILETYPE = 'char',
       FIELDTERMINATOR ='\t',
       ROWTERMINATOR = '\n'
    )
    --(所影响的行数为 7 行)
    /*
    test.txt文件内容:
    ----------------------------------------
    B077 曾翠兰 512942821117231 
    B183 艾丽红 432902820731842 
    B171 刘波 511303198402015000 
    B219 谢晓燕 511225198308240000 
    B249 江玉芬 450922196705073000 
    B032 李德祥 450922198802103000 
    B044 李雪梅 510923198906012000 
    ----------------------------------------
    test表结构:
    EmployeeCode nvarchar(20)
    ChineseName nvarchar(50)
    D bigint
    */
      

  6.   

    刚才又试了一下,可以手动转换数据类型
    那请问一下,SQL SERVER  对文本文件的数据导入时能不能自动转换类型?可以建立好数据表,再使用BULK INSERT方法导入,只要预先的类型正确,转换是没问题的。