2017-07-03 140 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