2009-06-14 81 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

相關問題