2013-04-17 220 views
0

我有一個PHP項目,我必須將超過10,000行插入到SQL表中。這些數據從表格中獲取,並檢查一些簡單的條件,並在每月月底插入第二個表格。如何向MSSQL插入超過10000行表

我該怎麼做。

我認爲需要更多的澄清。我目前使用小批量(250插入)傳輸使用PHP cronjob,它工作正常。但我需要這樣做是最合適的方法。

什麼是最合適的。

  1. 的cronjob用PHP,因爲我目前使用
  2. 導出到文件,批量導入方法
  3. 某種存儲過程的轉移直接

或任何其他。

+0

沒有什麼特別的。根據需要插入每一行。在月末,運行一個存儲過程或程序來執行月末處理。 – wallyk

+0

您可能希望使用'INSERT ... SELECT' http://msdn.microsoft.com/en-us/library/ms174335.aspx –

+0

最後我使用了批處理方法,它工作正常。 –

回答

2

由於數據量較大,請批處理500條記錄進行處理。

檢查這500個批次的條件,直到那個時候,準備好另一批500個插入第一批處理等。

這不會給你的sql服務器帶來負擔。

通過這種方式我每天處理40K記錄。

+1

10000行幾乎不大*,並且不需要將其分解爲更小的事務。 –

3

使用insert SQL語句。 :^)

向SQL Server 2012中的表或視圖添加一行或多行。有關示例,請參見Examples

使用mssql_ *擴展的示例。

$server = 'KALLESPC\SQLEXPRESS'; 
$link = mssql_connect($server, 'sa', 'phpfi'); 
mssql_query("INSERT INTO STUFF(id, value) VALUES ('".intval($id)."','".intval($value)."')"); 
+1

@slm,我完全不同意。 'insert'是插入記錄最常用的方式。 – sectus

+0

@slm,這是這裏最古老的答案... –

+0

@sectus謝謝! – slm

2

使用BULK INSERT - 它是專爲正是你所要求和顯著增加插入的速度。另外,(如果你確實沒有索引),你也可以考慮添加一個索引 - 一些索引(大多數是主鍵上的索引)可以提高插入的性能。

你應該能夠插入記錄的實際速率取決於確切的數據,表結構以及SQL服務器本身的硬件/配置,所以我不能給你任何數字。

+0

然後我必須將它們導出到文件。這不會花費資源(RAM和處理器)。 –

+0

是的,它會使用大量的RAM和處理器 –

1

這很簡單,你可以使用多個while來做,因爲10000行不是大數據!

$query1 = mssql_query("select top 10000 * from tblSource"); 
while ($sourcerow = mssql_fetch_object($query1)){ 
     mssql_query("insert into tblTarget (field1,field2,fieldn) values ($sourcerow->field1,$sourcerow->field2,$sourcerow->fieldn)"); 
} 

這應該是工作細

1

SQL Server中的一個批次不插入超過1000條記錄。您必須創建單獨的批次才能插入。在這裏,我提出了一些可以幫助你的替代方案。

創建一個存儲過程。爲有效數據創建兩個臨時表,其他用於無效數據。逐個檢查所有規則和驗證,並基於該數據插入到這兩個表中。

如果數據有效,則插入到有效的臨時表中,否則插入到無效的臨時表中。

現在,接下來使用合併語句,您可以根據需要將所有數據插入源表中。

,所以我希望這將是罰款

你謝謝你能轉移的表之間的記錄N多。