如何批量插入数据(sql server 2005)

ZXY900213 2012-06-13 11:01:02
INSERT INTO [Relation]([CustomerId],[UserId],[CreateDate])
SELECT [Id],1,GETDATE() FROM [Customers]


现在Customers表有20多万条数据,也就是说这条语句要一次性往Relation表插入20多万条数据,要执行好长一段时间。请问有其他更好的办法实现相同的效果吗???
...全文
217 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gogodiy 2012-06-14
  • 打赏
  • 举报
回复
禁用[Relation]的所有索引、触发器、函数等等,然后再插入。
ZXY900213 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

SQL code
SET ROWCOUNT 1000; INSERT INTO [Relation]([CustomerId],[UserId],[CreateDate]) SELECT [Id],1,GETDATE() FROM [Customers] WHILE @@ROWCOUNT=1000 INSERT INTO [Relation]([CustomerId],[UserId],[Cr……
[/Quote]

分批插入能把时间缩短么?我试试。。。
ZXY900213 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

一般都這樣做,應該用不了多久,若Relation表有觸發器,把你的trigger禁用掉吧,這樣會快些
SQL code

alter table Relation disable trigger all
--完成後
alter table Relation enable trigger all
[/Quote]

我这表没触发器。。
發糞塗牆 2012-06-13
  • 打赏
  • 举报
回复
插入慢的主要原因通常是插入过程中还做了其他事情,首要之一就是维护索引或者有触发器,对此你可以先禁用,让其能顺利插入,再启用。成熟的DBMS对大数据量插入的性能都不会很低,听说BCP可能达到100万行每秒。而我以前做银行系统(OLAP)的时候,往往都是千万级别插入。性能也不见得低。
ZXY900213 2012-06-13
  • 打赏
  • 举报
回复
我刚放到SQL Server里面执行,而且测试数据库只有136577条,用了4分16秒。
Felixzhaowenzhong 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
我纳闷,为啥我只发一条帖子,他却给我生成了两个贴???今天过节?买一送一???不会扣了我两个帖子的积分吧??
[/Quote]

你不结贴就不会扣你分

插入数据的时候,先把你目标表上的索引暂时禁用了,插入完后,再启用。这样可以提高效率
人生无悔 2012-06-13
  • 打赏
  • 举报
回复
一般都這樣做,應該用不了多久,若Relation表有觸發器,把你的trigger禁用掉吧,這樣會快些

alter table Relation disable trigger all
--完成後
alter table Relation enable trigger all

中国风 2012-06-13
  • 打赏
  • 举报
回复
SET ROWCOUNT 1000; INSERT INTO [Relation]([CustomerId],[UserId],[CreateDate]) SELECT [Id],1,GETDATE() FROM [Customers] WHILE @@ROWCOUNT=1000 INSERT INTO [Relation]([CustomerId],[UserId],[CreateDate]) SELECT [Id],1,GETDATE() FROM [Customers]  SET ROWCOUNT 0;
牛哥_ 2012-06-13
  • 打赏
  • 举报
回复
哈哈 扣了
ZXY900213 2012-06-13
  • 打赏
  • 举报
回复
我纳闷,为啥我只发一条帖子,他却给我生成了两个贴???今天过节?买一送一???不会扣了我两个帖子的积分吧??
天-笑 2012-06-13
  • 打赏
  • 举报
回复
20万数据 不用很长时间吧
我也这么执行的

这语句已经很简单了,求高手优化!!!
lycorisraya 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
SQL code

SET ROWCOUNT 1000; INSERT INTO [Relation]([CustomerId],[UserId],[CreateDate]) SELECT [Id],1,GETDATE() FROM [Customers] WHILE @@ROWCOUNT=1000 INSERT INTO [Relation]([CustomerId],[UserId],[C……
[/Quote]
这是个好办法!

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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