我有一些代码执行紧密循环以插入数千+记录,最近我介绍时<cfqueryparam>,CF崩溃.
就像是...
<cfquery>
<cfloop query="qBars">
INSERT INTO Foo
SET
xx = <cfqueryparam value="#qBars.aa#" sqltype="CF_SQL_VARCHAR">,
yy = <cfqueryparam value="#qBars.bb#" sqltype="CF_SQL_INTEGER">
</cfloop>
</cfquery>
Run Code Online (Sandbox Code Playgroud)
这曾经很好地工作,没有<cfqueryparam>.但是,对于cfqueryparam,我想当记录qBars数量很大(10,000+)时可能会出现问题.
现在......我该怎么办?重构在DB级别处理的整个事情?
谢谢
说实话,如果我需要将10k +记录加载到DB中,我就不会使用CFQUERY.您的数据库几乎肯定能够批量加载数据,因此我建议您进行调查.
我认为允许的最大绑定参数数量是数据库引擎设置的限制,而不是CF或底层JDBC.但是你没有提到你正在使用哪个数据库,因此很难在那里为你研究答案.
我做了一些窥探并找到了SQL Server的这个表:http://msdn.microsoft.com/en-us/library/ms143432.aspx.它没有具体提到内联查询可以有多少绑定参数,但是他们为proc或函数的params提到的2100的数字与我之前能够在列表中传递的参数的最大数量相同(喜欢WHERE IN子句).我一直以为它是列表的最大大小,但实际上它可能实际上是一般的多少参数的截止值.这对你来说很容易测试...尝试你的循环1005迭代,看看它是否有效.然后尝试1006次迭代,我可能会期望它失败.
当然,如果您碰巧在SQL Server上...
此外,你说事情崩溃,但你没有说出错误是什么......当你提出这类问题时,包含这类信息总是有帮助的.
| 归档时间: |
|
| 查看次数: |
1521 次 |
| 最近记录: |