我用Bulk Insert批量导入数据到SQL Server中,发现有些数据没有被导入,后来仔细检查发现这些记录都是因为他的Datetime类型的字段有问题,比如,如果是2006-10-19 09:10:00这种就可以导入,而2006-10-19 9:10:00就不行,我给9前面添加个0就可以了,SQL Server必须要求小时是两位的吗?我的数据文件有很多日期时间字段的小时都是一位。好急!但是我不用Bulk Insert导入,单独用一条SQL语句Update一条记录的时候,用2006-10-19 9:10:00可以正常插入,不知道为什么,很烦躁,因为数据比较多,用bulk insert导入比一条一条插入要方便,但是这个时间问题如何解决啊?还有这个Bulk Insert的FIRSTROW参数好像不怎么起作用,有一次试验,我设置它为0,它也是从文件第二行开始,设置为1它也是从第二行开始,设置为2也是从第二行开始。而且文件本来有4行数据,它总是只读取3行,少读一行,不知道怎么回事哦!

解决方案 »

  1.   

    Datetime类型的字段,无论插入2006-10-19 09:10:00还是2006-10-19 9:10:00都会转换成2006-10-19 09:10:00.000阿
      

  2.   

    fsqlString:='BULK INSERT '+ftable+' from '''+ftmpfilepath+''' with ( MAXERRORS=10000,FIELDTERMINATOR='','',KEEPNULLS,FIRSTROW=2,DATAFILETYPE=''char'',ROWTERMINATOR=''\n'')';
    SQLQuery.SQL.Clear;
    SQLQuery.SQL.Add(fsqlString);
    SQLQuery.ExecSQL;
      

  3.   

    omc_id,network_id,time_id
    2,2880,2006-10-19 8:00:00
    2,2880,2006-10-19 9:00:00
    2,2880,2006-10-19 10:00:00
    这三条记录只有最后一条可以插入,如果我在8,9之前加0就可以插入,为什么?
      

  4.   

    先插到一个varchar字段里,然后再往datetime里插吧
      

  5.   

    楼上说的不错,bulk insert 一个弱点就是不能转换数据类型,最好就是先bulk insert 到一个临时表,varchar字段类型,然后再转换为合适的数据类型 insert into 到正式表
      

  6.   

    bulk insert到一个临时表,可以。
    然后再类型转换,怎么转?一条一条记录去转?那会慢死!
      

  7.   

    insert into ...
    select * from 临时表