RT,导入到文本的数据中时间格式的数据只显示年月日时分,秒没显示!
比如说数据库中的2007-01-01 上午8:20:20导入到文本他只有2007-01-01 8:20AM,
再把数据导回数据库他就显示2007-01-01 上午8:20:00;
如果本身文本有2007-01-01 8:20:20AM,那导入数据库就是2007-01-01 上午8:20:20,这个完全没问题。
我用的语句是:
if(bcp_init(dbproc,"test_db..test","test_db.txt",(LPCSTR)NULL,DB_IN)==FAIL)
throw "bcp_init error";
if(bcp_control(dbproc,BCPFIRST,(DBINT)1)==FAIL)
throw "bcp_control error";
if(bcp_columns(dbproc,4)==FAIL)
         throw "bcp_columns error";
//SQLCHAR换成SQLVARCHAR也不行换成SQLDATETIMN文本就显示不出了该时间了,所以也不合适
if(bcp_colfmt(dbproc,1,SQLCHAR,0,(DBINT)-1,(LPCBYTE)"\t",1,1)==FAIL
         throw "bcp_colfmt error (col:1)";
if(bcp_exec(dbproc,&rowsread)==FAIL)
{
exit(ERREXIT);
}

解决方案 »

  1.   

    还要说点另外的信息,如果直接用BING访问单条,输出又是正确的,像下面则能输出完整的年月日时分秒
    dbuse (dbproc, "test_db"); // 
    dbsqlexec (dbproc); // send command buffer to SQL server
    dbresults(dbproc);
    dbbind (dbproc, 1, NTBSTRINGBIND, (DBINT) 0, (char *)time);
    // now process the rows
    while (dbnextrow(dbproc) != NO_MORE_ROWS)
    {
    printf ("time:  %s\n", time);
            }
    怎么会有这么奇怪的事情,NTBSTRINGBIND和SQLCHAR按照MSSQL2000帮助文档说应该是对应的啊,唏嘘不已!忘解答!
      

  2.   

    你把时间先转为为文本格式再导出.把表转换查询.例如:select convert(varchar(19),时间字段,120) from tb
      

  3.   

    如果要用CONVERT那么只能用先取出相关列,再用db_convert把那一列的数据转成SQLCHAR,在写文本把数据送过去,这样效率低好多哦,我用BCP基本没意义了!
      

  4.   

    好像直接用BCP_BIND可以直接绑定+转数据类型,但是写文本这个过程效率太低了,完全失去了原来批拷贝的意义啊!