现在需要使用向表中insert数据
大约100w条
我自己写程序一条一条的往里插,时间特别长特别长
而在Sql直接导文本则效率高很多
但直接导文本还需要将很多的数据进行分析,去掉一些冒号之类的
想问的是:
insert 100w条数据怎样做效率是最高的
数据本来是存在文本里的
然后刚才随便查阅了一下,很多人说用bcp,能否解释一下bcp...
thx~

解决方案 »

  1.   

    bcp "select * from 表名" queryin d:\名称.txt -c -q -SD服务器名 -U用户名 -P密码
      

  2.   

    如果不对数据做其他改动,直接插入,用SQL的导入导出工具.
    如果要对数据做出判断后才导入,就得自己写代码了.
      

  3.   

    恩的确是用导入导出工具非常快,但它的效率为什么这么高呢...
    如果不用导入导出工具用什么方法效率会最高
    即使我在程序中写代表,也是要写专门对sql的操作的
      

  4.   

    ..............
    说详细点
    我刚刚找到的
    BULK INSERT 表名 FROM 'c:\test.txt'
    WITH
    (
    FIELDTERMINATOR = '',
    ROWTERMINATOR = '\n'
    )
    endEXEC master..xp_cmdshell 'bcp mydatabase..mrc in d:\mrc.txt -c -S 127.0.0.1 -U sa -P sa'然后把这一句改成自己需要的
    我是这样理解的
    FIELDTERMINATOR='' //这个应该是用来分隔的字符
    ROWTERMINATOR='' //这个应该是分隔两行数据的字符然后EXEC master..xp_cmdshell 'bcp mydatabase..mrc in d:\mrc.txt -c -S 127.0.0.1 -U sa -P sa'
    根据自己的需要填入就行了
    我的理解是否正确?
    现在是...
    我放在查询分析器里运行,报end附近有错误
      

  5.   

    end 是与BEGIN配对的,有那个吗?
      

  6.   

    最新近况:
    EXEC master..xp_cmdshell 'bcp datebase..table out "c:\1.txt" -c -t"," -r "\r\n" -U"sa" -P"sa"'
    导出成功
    但导入时
    EXEC master..xp_cmdshell 'bcp datebase..table in "c:\1.txt" -c -t"," -r "\r\n" -U"sa" -P"sa"'
    却报错
    报错为:NULL
    开始复制...
    SQLState = S1000, NativeError = 0
    Error = [Microsoft][ODBC SQL Server Driver]在 BCP 数据文件中遇到的意外的 EOF
    NULL
    已复制了 0 行。
    数据包的大小(字节): 4096
    时钟时间(毫秒): 共      1
    NULL请问究竟是为什么呢....thxthxthx...你们都是偶得神啊
    而且就算我任意的在文本里输入
    1,1,1,1,1,1,1,
    都会报错
    而且表里的字段都是允许为空的
    有一个时间字段,但就算我把那里改成标准格式还是报相同的错...
      

  7.   

    恩,今天把问题解决了,最后发现我写的东西的确是没有错的,可是在用bcp插入时即使有字段可以为空,但不表示txt里可以没有这个内容,所有为空的字段不需要插的字段我在txt里加上了,然后就能插了
    谢谢大家~
      

  8.   

    insert t1
    select col1=isnull(col1,''),....--指定列
    from OpenRowset('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)};
    DefaultDir=E:\;','select * from roy.txt')a
    如果txt没列名时,可自定义:
    "col1" "col2"--在txt第一行