2017-07-03 65 views
0

我在使用MySQL進行數據庫操作時專門使用存儲過程。有必要定期插入數千條記錄。有沒有辦法將集合作爲參數傳遞給存儲過程?如果存在,存儲過程如何將接收到的參數作爲一個批量插入插入?如何使用存儲過程進行MySQL批量插入?

+1

集合當然是您正在使用的應用程序語言(C#,Java等)的語言結構。你沒有提及你使用的是什麼語言。你有沒有排除使用'LOAD DATA INFILE'來吸引你的大型數據集? –

+0

我正在使用Javascript。也許使用「收集」這個詞是一個糟糕的選擇。我沒有在應用程序語言的上下文中使用它,而是以通用的方式使用它。不管應用程序語言如何,如果我要針對MySQL運行原始SQL來調用SP,我將如何去傳遞一組數據以及如何將SP編碼爲一次插入批量加載?這真是我的問題。 – jiminssy

回答

0

我對存儲過程的理解是參數不能包含任何代碼,這些代碼將是可執行命令,如INSERT DELETE UPDATE only變量。所以你不能將一個完整的INSERT命令傳遞給存儲過程。因此,存儲過程可防止SQL注入。下面是通過@Polynomials在存儲過程中分離命令和參數的理由的極好和非常類似Turing的解釋https://security.stackexchange.com/questions/25684/how-can-i-explain-sql-injection-without-technical-jargon/25710#25710

因此,批處理插入將作爲@O加載數據INFILE。 Jones在上面的註釋中說過,或者在INSERT存儲過程中使用您選擇的語言來迭代通過插入插入參數的插入。

+0

謝謝你的迴應。我沒有傾向於字面的SQL語句。我想知道是否有某種字符串格式,SP作爲一個參數被解釋爲SQL中的某種集合。我想沒有這樣的事情。我會嘗試執行LOAD DATA INFILE方法。謝謝。 – jiminssy