T-sql插入大量数据问题

时间:2010-11-08 12:47:59

标签: sql sql-server database tsql

这是我的困境,

8表

最多72列

包括数据类型int,smallint,decimal,smalldatetime,char

没有什么可以吓到的。

我创建了100行,1000行10000行,50000行,100000行,500000行,但它们在insert语句中。这是用于体积测试的。

尝试运行50K查询时,sql server内存不足。

我有什么选择。我是否需要打破小问题;我可以提交每一行X,如何确定最大行是否有比插入语句更好的方法>? Excel和访问权限排除了应有的数据量。

有没有一个示例循环t-sql语句来创建不同类型的数据?

5 个答案:

答案 0 :(得分:3)

使用“GO”关键字拆分插入语句的部分。它将结束一批并开始另一批。为了便于测试生成,用“GO”分割每一行是正常的。

insert into XXX (1, 2, 3, ...)
...
insert into XXX (2, 3, 4, ...)
GO
insert into XXX (3, 4, 5, ...)
...
insert into XXX (4, 5, 6, ...)
GO

insert into XXX (1, 2, 3, ...)
GO
insert into XXX (2, 3, 4, ...)
GO
insert into XXX (3, 4, 5, ...)
GO

答案 1 :(得分:2)

BULK INSERT正是针对这种情况 - 将大量数据加载到SQL服务器中。为什么它比普通插入更有效,更快?因为B树是由自下而上而不是正常的自上而下插入和分割方法构建的。

答案 2 :(得分:0)

“有没有一个示例循环t-sql语句来创建不同类型的数据?”

Loop也可用。

declare @i int
set @i = 0
while @i<50000
begin
  set @i = @i+1
  insert into XXX (@i, 1, 2, 3)
end

答案 3 :(得分:0)

由于您使用的是.NET框架,因此您应该查看dataadapter上的updateBatchSize参数。它会为你照顾很多内部因素。更多信息@ msdn.microsoft.com/en-us/library/kbbwt18a(VS.80).aspx

答案 4 :(得分:0)

使用SSIS,在DataFlowTask中,它可以选择指定批量大小。