EXEC master..xp_cmdshell 'bcp test.dbo.P_Aspect in c:\temp1.txt -c -q -S"servername" -U"sa" -P""'

解决方案 »

  1.   

    select  列名=[name],列长度=[length] from syscolumns where id = object_id('表名')这样的就话就能返回每个字段的长度,你从这里想想办法吧,希望对你有帮助
      

  2.   

    vinsonshen(有空多来,努力升星~~) :谢谢!
    你这样仅仅知道数据表的每个字段的长度啊,现在是数据导入的问题,我现在暂时没有办法,只好进行转换,但数据很大,有600M左右,所以运行很慢,转换后再用BCP导入又要花时间,是对移动用户的清单文件进行处理.
      

  3.   

    用下面的語句EXEC master..xp_cmdshell 'bcp 數據庫.dbo.kind in "e:\test.txt" -c -q -S -U -P'前提條件是表如kind要存在,而且字段與test.txt字段數目要一樣多
      

  4.   

    或用下面語句BULK INSERT hdh.dbo.kind
    FROM 'e:\tx1.txt'
    WITH (
        FIELDTERMINATOR = '\t',
        ROWTERMINATOR = '\n'
    )前提條件是表如kind要存在,而且字段與test.txt字段數目要一樣多
    在查詢分析器中運行,而且是以sa用戶登錄
      

  5.   

    首先谢谢(Water Space--海洋空間) 如果是格式文件:
    1!13509053000!20041012!13826310006!0000.40!0000.00!1
    1!13509053000!20041012!13826310007!0000.40!0000.00!1
    1!13509053000!20041011!13826310007!0000.40!0000.00!1
    就可以用语句:
    BULK INSERT daylistdatabase.dbo.DayList
    FROM 'E:\daylistcount\aa.txt'
    WITH (
        FIELDTERMINATOR = '!',
        ROWTERMINATOR = '\n')
    进行导入.
    现在的格式如下:
    11350905300020041012138263100060000.400000.001
    11350905300020041012138263100070000.400000.001
    11350905300020041011138263100070000.400000.001

    BULK INSERT daylistdatabase.dbo.DayList
    FROM 'E:\daylistcount\aa.txt'
    WITH (
        FIELDTERMINATOR = '\t',
        ROWTERMINATOR = '\n')
    就会产生以下的错误问题:
    服务器: 消息 4832,级别 16,状态 1,行 1
    大容量插入: 在数据文件中遇到意外的文件结尾 (EOF)。
    服务器: 消息 7399,级别 16,状态 1,行 1
    OLE DB 提供程序 'STREAM' 报错。提供程序未给出有关错误的任何信息。
    OLE DB 错误跟踪[OLE/DB Provider 'STREAM' IRowset::GetNextRows returned 0x80004005:  提供程序未给出有关错误的任何信息。]。
    语句已终止。CREATE TABLE [dbo].[daylist] (
    [district] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
    [phone] [char] (11) COLLATE Chinese_PRC_CI_AS NULL ,
    [rq] [datetime] NULL ,
    [telnum] [char] (18) COLLATE Chinese_PRC_CI_AS NULL ,
    [move_fee] [decimal](7, 2) NULL ,
    [long_fee] [decimal](7, 2) NULL ,
    [user_type] [char] (1) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GO
      

  6.   

    那你這樣做看看?因為是小數點分開的BULK INSERT daylistdatabase.dbo.DayList
    FROM 'E:\daylistcount\aa.txt'
    WITH (
        FIELDTERMINATOR = '.',
        ROWTERMINATOR = '\n')
      

  7.   

    如果数据文件是定长分隔字段的话,必须创建格式文件!
    BULK INSERT daylistdatabase.dbo.DayList
    FROM 'E:\daylistcount\aa.txt'
    WITH (
        formatfile=c:\format.fmt
    )
      

  8.   

    批量导入用这个:
    请参考:
    1:不带有条件的从文本导入到数据库:
    EXEC master..xp_cmdshell 'BCP bank..sss in E:\实验用数据库\ddd.txt -c -S7824558CF32B4F1\SQL01 -Usa -P520520'2:不带有条件的从数据库导出到文本:
    EXEC master..xp_cmdshell 'BCP bank..bank out E:\实验用数据库\aaa.txt -c -S7824558CF32B4F1\SQL01 -Usa -P520520'3:带有条件的从数据库导出(转换成本)
    EXEC master..xp_cmdshell 'BCP "select * from bank..sss where conut<10 " queryout E:\实验用数据库\sss.txt -c -S7824558CF32B4F1\SQL01 -Usa -P520520'/*******  导出到excel
    EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'/***********  导入Excel
    SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
    --从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:
    insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
    ,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)
    select * from 表
    --如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:
    --导出表的情况
    EXEC master..xp_cmdshell 'bcp 数据库名.dbo.表名 out "c:\test.xls" /c /S"服务器名" /U"用户名" -P"密码"'--导出查询的情况
    EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout "c:\test.xls" /c /S"服务器名" /U"用户名" -P"密码"'
    /*--说明:
    c:\test.xls  为导入/导出的Excel文件名.
    sheet1$      为Excel文件的工作表名,一般要加上$才能正常使用.
    --*/
      

  9.   

    创建格式文件,然后使用bulk insert最佳,联机帮主里面有呀
      

  10.   

    谢谢大家,最终我还是选择先转换文件,然后用BCP的方法倒入