SQL——insert大量数据问题

crescent_star 2007-10-19 02:28:07
现在需要使用向表中insert数据
大约100w条
我自己写程序一条一条的往里插,时间特别长特别长
而在Sql直接导文本则效率高很多
但直接导文本还需要将很多的数据进行分析,去掉一些冒号之类的
想问的是:
insert 100w条数据怎样做效率是最高的
数据本来是存在文本里的
然后刚才随便查阅了一下,很多人说用bcp,能否解释一下bcp...
thx~
...全文
408 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2007-10-20
  • 打赏
  • 举报
回复
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第一行
crescent_star 2007-10-20
  • 打赏
  • 举报
回复
恩,今天把问题解决了,最后发现我写的东西的确是没有错的,可是在用bcp插入时即使有字段可以为空,但不表示txt里可以没有这个内容,所有为空的字段不需要插的字段我在txt里加上了,然后就能插了
谢谢大家~
crescent_star 2007-10-19
  • 打赏
  • 举报
回复
最新近况:
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,
都会报错
而且表里的字段都是允许为空的
有一个时间字段,但就算我把那里改成标准格式还是报相同的错...
guyehanxinlei 2007-10-19
  • 打赏
  • 举报
回复
end 是与BEGIN配对的,有那个吗?
crescent_star 2007-10-19
  • 打赏
  • 举报
回复
..............
说详细点
我刚刚找到的
BULK INSERT 表名 FROM 'c:\test.txt'
WITH
(
FIELDTERMINATOR = '',
ROWTERMINATOR = '\n'
)
end

EXEC 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附近有错误
nokia4321 2007-10-19
  • 打赏
  • 举报
回复
BULK INSERT这个可以。
crescent_star 2007-10-19
  • 打赏
  • 举报
回复
恩的确是用导入导出工具非常快,但它的效率为什么这么高呢...
如果不用导入导出工具用什么方法效率会最高
即使我在程序中写代表,也是要写专门对sql的操作的
dawugui 2007-10-19
  • 打赏
  • 举报
回复
如果不对数据做其他改动,直接插入,用SQL的导入导出工具.
如果要对数据做出判断后才导入,就得自己写代码了.
wolaile27 2007-10-19
  • 打赏
  • 举报
回复
bcp "select * from 表名" queryin d:\名称.txt -c -q -SD服务器名 -U用户名 -P密码

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧