2009-06-14 78 views
0

我有一个程序,我需要对MS SQL表运行多个插入语句(动态生成)。现在,我做的(伪代码):执行多个插入语句,最好的方法是什么?

Loop 
Generate Insert Statement String 
SQLCommand.Text = Generated Insert Statement String 
SQLCommand.Execute(). 
End Loop 

Close Connection 

是更好的性能,明智的做法是简单地构建插入的一个大的字符串,用分号隔开。并只运行一个SQLCommand.Execute()语句?或者它没有影响?

谢谢!

回答

3

你开始插入之前,您需要启动一个事务。然后,当您将所有插入内容发送到服务器并完成循环时,您应该提交。这将为您节省大量的数据库写入!

查看更多这里:http://msdn.microsoft.com/en-us/library/5ha4240h.aspx

3

,你可能会发现这个technique有用。它显着减少了处理的报表数量。

0

这将是快了很多批量起来,否则,SQL Server有看执行计划等,这取决于有多大的循环和语句是这样我可能会在同一时间发送N条记录,然后让它回来,只是为了给自己一些喘息的空间。另一件你可能想要考虑的事情(我来这里就好像它'扔掉代码'一样,只是做一个批量加载。 SSIS也是一种选择......

0

在Postgres的你会使用COPY,允许批量插入的CSV般的格式。不知道sqlserver是否有类似的东西。

另一种方法是使用存储proceedure,只是传递数据的一长串一些后端插入循环。

+0

它确实;这是一个名为bcp的程序。 – Jacob 2009-06-14 15:43:47

1

如果你选择在这个阶段有能力这样做,你可能要升级到SQL Server 2008。它有很多额外的好处,包括除了T-SQL在一个声明中做多个插入。

+0

是吗? UNION和批量复制一直存在 – gbn 2009-06-14 16:33:29

+1

它将多个插入直接添加到T-SQL中。插入到Blah(foo,bar)VALUES(1,2),(3,4)。你可以使用UNION和bcp做些事情,但这是一个方便的添加,可以减少冗长。 – Jacob 2009-06-14 17:45:55

相关问题