跪求大容量csv导入sql2000中的最快速办法。

从前现在过去了再不来 2017-07-23 04:48:29
sql2000是否可以使用 bcp bulk insert?
假设csv为

200w行

两列

格式为
1 x.x
2 x.x
...
2000000 x.x

导入sql2000数据库表 Jr

Jr表格式

3列

ID IQ Date (其中ID储存csv第一行,IQ储存csv第二行数据,date储存导入的当天日期如2017-7-23)

问题: bcp和bulk insert哪个办法最快速导入?最快用时多少秒?
两者语句如何写?
诚心跪求,困扰很久,分全送上
...全文
1068 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
OwenZeng_DBA 2017-07-23
  • 打赏
  • 举报
回复
@u011293682 哈哈,客气客气,你也是。
  • 打赏
  • 举报
回复
引用 20 楼 z10843087 的回复:
[quote=引用 19 楼 u011293682 的回复:] [quote=引用 18 楼 z10843087 的回复:] @u011293682
CREATE TABLE test07232(id INT ,iq VARCHAR(300))

bulk insert test07232
from 'D:\2017-7-22.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '0x0a' 
)
 

悲剧,导入成功
但是我本地
win7 64 sql2000
i7 16G prossd 机子
用时59秒

 SELECT * ,GETDATE()  AS Date INTO ttt 
 FROM test07232  
终于找到办法了,你用上面的办法试试,,前面的BULK INSERT 大概10s, select into 0 s 。如果你是服务器,IO 好些,应该可以在10s内完成。
卧槽,我i7双核 PRO ssd 2s,哈哈。大神真吊。。。 不过csv需要同时放在ssd,和数据库一个盘 刚才测试数据库ssd,csv机械盘,59s 全都都在ssd,就2s 后面插入用时1s 激动万分 然后我想想怎么把 建临时表 bulk插临时表 插正是表 删除临时表 这4步骤放进软件里一步完成 还有个小问题 插入正式表的时候 时间格式能不能只要 年月日 不需要 精确到小时分秒? [/quote] 把最后的插入正式表的语句稍微修改下就可以
 SELECT * , convert(char(10),GetDate(),120) as Date  INTO ttt1 
 FROM test07232
[/quote] 真的感谢,祝大神好人一生平安,约X成功
OwenZeng_DBA 2017-07-23
  • 打赏
  • 举报
回复
引用 19 楼 u011293682 的回复:
[quote=引用 18 楼 z10843087 的回复:] @u011293682
CREATE TABLE test07232(id INT ,iq VARCHAR(300))

bulk insert test07232
from 'D:\2017-7-22.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '0x0a' 
)
 

悲剧,导入成功
但是我本地
win7 64 sql2000
i7 16G prossd 机子
用时59秒

 SELECT * ,GETDATE()  AS Date INTO ttt 
 FROM test07232  
终于找到办法了,你用上面的办法试试,,前面的BULK INSERT 大概10s, select into 0 s 。如果你是服务器,IO 好些,应该可以在10s内完成。
卧槽,我i7双核 PRO ssd 2s,哈哈。大神真吊。。。 不过csv需要同时放在ssd,和数据库一个盘 刚才测试数据库ssd,csv机械盘,59s 全都都在ssd,就2s 后面插入用时1s 激动万分 然后我想想怎么把 建临时表 bulk插临时表 插正是表 删除临时表 这4步骤放进软件里一步完成 还有个小问题 插入正式表的时候 时间格式能不能只要 年月日 不需要 精确到小时分秒? [/quote] 把最后的插入正式表的语句稍微修改下就可以
 SELECT * , convert(char(10),GetDate(),120) as Date  INTO ttt1 
 FROM test07232
  • 打赏
  • 举报
回复
引用 18 楼 z10843087 的回复:
@u011293682
CREATE TABLE test07232(id INT ,iq VARCHAR(300))

bulk insert test07232
from 'D:\2017-7-22.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '0x0a' 
)
 

悲剧,导入成功
但是我本地
win7 64 sql2000
i7 16G prossd 机子
用时59秒

 SELECT * ,GETDATE()  AS Date INTO ttt 
 FROM test07232  
终于找到办法了,你用上面的办法试试,,前面的BULK INSERT 大概10s, select into 0 s 。如果你是服务器,IO 好些,应该可以在10s内完成。
卧槽,我i7双核 PRO ssd 2s,哈哈。大神真吊。。。 不过csv需要同时放在ssd,和数据库一个盘 刚才测试数据库ssd,csv机械盘,59s 全都都在ssd,就2s 后面插入用时1s 激动万分 然后我想想怎么把 建临时表 bulk插临时表 插正是表 删除临时表 这4步骤放进软件里一步完成 还有个小问题 插入正式表的时候 时间格式能不能只要 年月日 不需要 精确到小时分秒?
OwenZeng_DBA 2017-07-23
  • 打赏
  • 举报
回复
@u011293682
CREATE TABLE test07232(id INT ,iq VARCHAR(300))

bulk insert test07232
from 'D:\2017-7-22.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '0x0a' 
)
 

 SELECT * ,GETDATE()  AS Date INTO ttt 
 FROM test07232  
终于找到办法了,你用上面的办法试试,,前面的BULK INSERT 大概10s, select into 0 s 。如果你是服务器,IO 好些,应该可以在10s内完成。
  • 打赏
  • 举报
回复
引用 16 楼 sinat_28984567 的回复:
[quote=引用 15 楼 u011293682 的回复:] 如果源csv的换行符无法获取,是不是就无法Bulk了?
应该可以想法处理处理,源文件是怎么来的? [/quote] 源文件是不可描述而来。。。 所以觉得不可能有修改 现在的报错
服务器: 消息 4866,级别 17,状态 66,行 1
大容量插入失败。数据文件中第 1 行、第 1 列的列太长。请确保正确地指定了字段终止符和行终止符。
服务器: 消息 7399,级别 16,状态 1,行 1
OLE DB 提供程序 'STREAM' 报错。提供程序未给出有关错误的任何信息。
OLE DB 错误跟踪[OLE/DB Provider 'STREAM' IRowset::GetNextRows returned 0x80004005:  提供程序未给出有关错误的任何信息。]。
语句已终止。
应该就是无法换行造成的
二月十六 2017-07-23
  • 打赏
  • 举报
回复
引用 15 楼 u011293682 的回复:
如果源csv的换行符无法获取,是不是就无法Bulk了?
应该可以想法处理处理,源文件是怎么来的?
  • 打赏
  • 举报
回复
引用 10 楼 sinat_28984567 的回复:
[quote=引用 9 楼 u011293682 的回复:] 大神,你是先bcp,再bulk? 我新建临时表的时候
Create Table #TEST_IP(ID Int,IQ VarChar(255),Date DateTime)  
然后bulk直接插入,就一直不行了
不是,我是把两种方式都写了一下,用哪个都行,bcp是在控制台执行的代码;bulk可以直接在数据库执行,当然bcp在数据库调用cmdshel执行l也可以…… 楼主因为你的csv数据中只有两列数据,所以临时表也应该只有两列
Create Table #TEST_IP(ID Int,IQ VarChar(255))  
[/quote] 如果源csv的换行符无法获取,是不是就无法Bulk了?
  • 打赏
  • 举报
回复
引用 13 楼 z10843087 的回复:
[quote=引用 12 楼 四块石头的回复:][quote=引用 11 楼 z10843087 的回复:] [quote=引用 7 楼 u011293682 的回复:] [quote=引用 5 楼 z10843087 的回复:] @u011293682 你的csv是以什么分隔的。你可以右键吧你的csv另存为.csv 。然后再试试
大神 我能发一份我的csv给你 测试吗?我这里一直报错,万分感谢啊[/quote]
CREATE TABLE test07232(id INT ,iq VARCHAR(300))

bulk insert test07232
from 'D:\2017-7-22new.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n' 
)
 
 insert into 目标表
 SELECT * ,GETDATE() AS Date FROM test07232
你的csv要另存一下,我把另存的内容发给你了。 bulk insert 大概10s ,如果你是服务器肯定会快一些。[/quote] 感谢热心的大神 但是这个办法不行。打开再另存,再开始代码,这样耗时太多了 要10s内才可以啊[/quote] 之所以要另存为是因为你的csv换行符识别不到。你的csv是怎么来的,可以考虑从源头改变下[/quote] 源头不在控制范围啊,难道是这份csv无法bulk?
OwenZeng_DBA 2017-07-23
  • 打赏
  • 举报
回复
引用 12 楼 四块石头的回复:
[quote=引用 11 楼 z10843087 的回复:] [quote=引用 7 楼 u011293682 的回复:] [quote=引用 5 楼 z10843087 的回复:] @u011293682 你的csv是以什么分隔的。你可以右键吧你的csv另存为.csv 。然后再试试
大神 我能发一份我的csv给你 测试吗?我这里一直报错,万分感谢啊[/quote]
CREATE TABLE test07232(id INT ,iq VARCHAR(300))

bulk insert test07232
from 'D:\2017-7-22new.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n' 
)
 
 insert into 目标表
 SELECT * ,GETDATE() AS Date FROM test07232
你的csv要另存一下,我把另存的内容发给你了。 bulk insert 大概10s ,如果你是服务器肯定会快一些。[/quote] 感谢热心的大神 但是这个办法不行。打开再另存,再开始代码,这样耗时太多了 要10s内才可以啊[/quote] 之所以要另存为是因为你的csv换行符识别不到。你的csv是怎么来的,可以考虑从源头改变下
  • 打赏
  • 举报
回复
引用 11 楼 z10843087 的回复:
[quote=引用 7 楼 u011293682 的回复:] [quote=引用 5 楼 z10843087 的回复:] @u011293682 你的csv是以什么分隔的。你可以右键吧你的csv另存为.csv 。然后再试试
大神 我能发一份我的csv给你 测试吗?我这里一直报错,万分感谢啊[/quote]
CREATE TABLE test07232(id INT ,iq VARCHAR(300))

bulk insert test07232
from 'D:\2017-7-22new.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n' 
)
 
 insert into 目标表
 SELECT * ,GETDATE() AS Date FROM test07232
你的csv要另存一下,我把另存的内容发给你了。 bulk insert 大概10s ,如果你是服务器肯定会快一些。[/quote] 感谢热心的大神 但是这个办法不行。打开再另存,再开始代码,这样耗时太多了 要10s内才可以啊
OwenZeng_DBA 2017-07-23
  • 打赏
  • 举报
回复
引用 7 楼 u011293682 的回复:
[quote=引用 5 楼 z10843087 的回复:] @u011293682 你的csv是以什么分隔的。你可以右键吧你的csv另存为.csv 。然后再试试
大神 我能发一份我的csv给你 测试吗?我这里一直报错,万分感谢啊[/quote]
CREATE TABLE test07232(id INT ,iq VARCHAR(300))

bulk insert test07232
from 'D:\2017-7-22new.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n' 
)
 
 insert into 目标表
 SELECT * ,GETDATE() AS Date FROM test07232
你的csv要另存一下,我把另存的内容发给你了。 bulk insert 大概10s ,如果你是服务器肯定会快一些。
二月十六 2017-07-23
  • 打赏
  • 举报
回复
引用 9 楼 u011293682 的回复:
大神,你是先bcp,再bulk? 我新建临时表的时候
Create Table #TEST_IP(ID Int,IQ VarChar(255),Date DateTime)  
然后bulk直接插入,就一直不行了
不是,我是把两种方式都写了一下,用哪个都行,bcp是在控制台执行的代码;bulk可以直接在数据库执行,当然bcp在数据库调用cmdshel执行l也可以…… 楼主因为你的csv数据中只有两列数据,所以临时表也应该只有两列
Create Table #TEST_IP(ID Int,IQ VarChar(255))  
  • 打赏
  • 举报
回复
引用 8 楼 sinat_28984567 的回复:
首先楼主的csv文件和表字段有不一样的,可以先把数据放到一个字段一样的临时表中; bcp:
bcp tempdb.dbo.tt in e:\test.csv -c  -Usa -P123456
bulk insert:
BULK INSERT  tempdb.dbo.tt
   FROM 'E:\test.csv';
然后再从临时表把数据插入到数据表中并加上时间
INSERT  INTO 表
        SELECT  * ,
                GETDATE()
        FROM    tempdb.dbo.tt
一般BULK INSERT比bcp要快
大神,你是先bcp,再bulk? 我新建临时表的时候
Create Table #TEST_IP(ID Int,IQ VarChar(255),Date DateTime)  
然后bulk直接插入,就一直不行了
二月十六 2017-07-23
  • 打赏
  • 举报
回复
首先楼主的csv文件和表字段有不一样的,可以先把数据放到一个字段一样的临时表中; bcp:
bcp tempdb.dbo.tt in e:\test.csv -c  -Usa -P123456
bulk insert:
BULK INSERT  tempdb.dbo.tt
   FROM 'E:\test.csv';
然后再从临时表把数据插入到数据表中并加上时间
INSERT  INTO 表
        SELECT  * ,
                GETDATE()
        FROM    tempdb.dbo.tt
一般BULK INSERT比bcp要快
  • 打赏
  • 举报
回复
引用 5 楼 z10843087 的回复:
@u011293682 你的csv是以什么分隔的。你可以右键吧你的csv另存为.csv 。然后再试试
大神 我能发一份我的csv给你 测试吗?我这里一直报错,万分感谢啊
  • 打赏
  • 举报
回复
引用 3 楼 z10843087 的回复:
@u011293682 是分2步的,不过速度还是非常快,你对性能的要求很高吗?你可以先按照上面的办法试试看时间多长,能否满足你的要求。
是啊,越快越好,期望文中所说的10秒内 目前bulk报错如上啊
OwenZeng_DBA 2017-07-23
  • 打赏
  • 举报
回复
@u011293682 你的csv是以什么分隔的。你可以右键吧你的csv另存为.csv 。然后再试试
  • 打赏
  • 举报
回复
引用 1 楼 z10843087 的回复:
[quote=引用 楼主 u011293682 的回复:] sql2000是否可以使用 bcp bulk insert? 假设csv为 200w行 两列 格式为 1 x.x 2 x.x ... 2000000 x.x 导入sql2000数据库表 Jr Jr表格式 3列 ID IQ Date (其中ID储存csv第一行,IQ储存csv第二行数据,date储存导入的当天日期如2017-7-23) 问题: bcp和bulk insert哪个办法最快速导入?最快用时多少秒? 两者语句如何写? 诚心跪求,困扰很久,分全送上
CREATE TABLE test07231(id INT ,iq DECIMAL)

bulk insert test07231
from 'D:\test2.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n' 
)
 
 insert into 目标表
 SELECT * ,GETDATE() AS Date FROM test07231

就用bulk insert 吧,速度挺快的。例子如上,可以先导入到一个临时表中,然后用下面的查询语句插入的你实际想导入的表[/quote]
服务器: 消息 4866,级别 17,状态 66,行 1
大容量插入失败。数据文件中第 1 行、第 2 列的列太长。请确保正确地指定了字段终止符和行终止符。
服务器: 消息 7399,级别 16,状态 1,行 1
OLE DB 提供程序 'STREAM' 报错。提供程序未给出有关错误的任何信息。
OLE DB 错误跟踪[OLE/DB Provider 'STREAM' IRowset::GetNextRows returned 0x80004005:  提供程序未给出有关错误的任何信息。]。
语句已终止。
OwenZeng_DBA 2017-07-23
  • 打赏
  • 举报
回复
@u011293682 是分2步的,不过速度还是非常快,你对性能的要求很高吗?你可以先按照上面的办法试试看时间多长,能否满足你的要求。
加载更多回复(2)
渭河流域位于国黄河游地区,是黄河的重要一级支流流域,地理范围主要涵盖陕西省部、甘肃东部和宁夏部分地区。该流域自西向东延伸,总长约818公里,流域面积广阔,人口密集,是我国重要的农业与工业带,同时也是西北地区经济、文化与生态发展的核心区域之一。渭河流域水系发育完善,除干流外,还包括泾河、洛河、沣河、滈河等多条支流,构成了完整的河网体系,对黄河流域的水资源调配与生态安全具有重要意义。 本数据集提供了渭河流域矢量边界及河流分布的标准化shp文件,包含以下文件: (1)可编辑MXD文件:可直接在 ArcGIS 打开,用户可进行二次编辑、专题制图及空间分析,方便科研、教学与管理应用。 (2)标准SHP文件:包含渭河流域边界矢量数据以及干流与主要支流的矢量化河流线条,属性表附带河流名称、流域隶属等信息,便于查询与叠加分析。 (3)标准成图TIF文件:输出高清、规范的地图成果,能够直观展示渭河流域整体边界与内部河流分布格局,可用于汇报、展示与出版。 本资源可广泛应用于流域水资源管理、生态环境保护、土地利用研究、洪涝灾害评估等领域,同时也能为流域综合治理、生态修复规划、水文模拟与地理建模提供基础支撑。通过与其他数据(如DEM、土地覆盖、气象数据)叠加使用,还能开展更加深入的多源数据分析,为黄河流域高质量发展与区域生态安全提供科学依据。
一、商户信息管理模块 商户入驻与审核 商户在线提交入驻申请,上传营业执照、经营许可证、卫生许可证(餐饮类)等资质文件,填写基本信息(商户名称、经营范围、地址、联系方式、营业时间等)。 景区管理员对申请进行审核,通过后生成唯一商户编号,商户可登录系统完善详情(店铺简介、环境照片、特色产品等)。 商户分类与标签管理 按经营类型分类:餐饮住宿(民宿、餐馆)、旅游商品(手工艺品、特产店)、体验项目(骑马、漂流)、便民服务(超市、药店)等。 为商户添加特色标签(如 “清真餐饮”“亲子友好”“网红打卡地”),便于游客精准筛选。 商户信息维护 商户可更新店铺状态(营业 / 暂停 / 歇业)、修改营业时间、发布临时公告(如 “今日特价活动”)。 管理员可查看商户运营数据,对违规商户进行警告、限期整改或暂停合作处理。 二、商户运营监管模块 商品与服务管理 商户上传商品 / 服务信息(名称、价格、规格、图片),餐饮类需标注食材来源、口味特色;体验类需注明安全须知、时长。 支持价格调整记录,系统自动留存价格变动日志,便于监管部门核查是否存在乱收费现象。 游客消费与投诉处理 对接支付系统,记录游客在商户的消费数据(匿名化处理,仅统计交易金额、频次)。 游客可通过系统提交对商户的投诉(服务态度、商品质量、价格问题等),上传凭证(照片、聊天记录),系统自动通知商户限期回应,管理员跟踪处理结果。 评分与信用管理 游客消费后可对商户进行星级评分(1-5 星)及文字评价,评价内容需经管理员审核后展示。 系统根据评分、投诉处理率、违规记录生成商户信用等级,信用过低的商户将被限制曝光或强制整改。 三、景区资源与活动管理 商户资源调度 针对景区内共享资源(如摊位、停车场、公共休息区),商户可在线申请使用时段,管理员审核分配,避免资源冲突。 记录资源使用情况,按规定收取管理费,生成缴费提醒与票据。

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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