寻找更有效的方式来根据查询结果插入记录。cfoutput里面的cfquery查询结果
例子:
<cfoutput query="actionInfo">
<cfquery datasource="cfdev">
insert into dbo.buttonActions
(fID, bID, fieldID, aClear, aPress, aCheck, aUncheck, aCheckAll, aUncheckAll, tID)
values
('#newID#', '#bID#', '#fieldID#', '#aClear#', '#aPress#', '#aCheck#', '#aUncheck#', '#aCheckAll#', '#aUncheckAll#', '#tID#')
</cfquery>
</cfoutput>
这将贯穿,并作出新的插入到数据库中,通过对每个CFOUTPUT循环。我已经尝试将cfoutput放入cfquery中,但每次都会遇到错误。
UPDATE:
这是最终为我工作的基础上,Dan的例子:
<cfquery datasource = "dsn">
insert into newTable
(fID, field1, field2, etc)
select '#newID#', field1, field2, etc -- the sql from q1
</cfquery>
A)什么是您的DBMS? B)你真的需要一个循环吗?如果源表和目标表存在于同一数据库和/或同一数据库中,则可能不需要循环。 C)通常最有效的批量插入数据的方法是使用你的db批量加载工具。这些因dbms而异,但您没有提及您使用的是哪一个。 (注意,*总是*使用cfqueryparam和变量查询参数,特别是在循环时) – Leigh
需要注意的另一件事:当你在cfoutput中放置一个cfquery时,你为每个返回的行创建一个到数据库的新连接在您的原始查询中。这可能是一个巨大的瓶颈。我会遵循Dan的建议,并尝试将其全部置于一个查询或Leigh的建议中,并使用DB的批量数据加载工具。 – Shawn
@Leigh谢谢你的好建议。一旦我了解了它,我一直在稳步地将我的代码转换为cfqueryparam。是的,巨大的瓶颈是我想要避免的。想用只是一个SQL查询来写这个,没有循环。看着丹的建议,但需要更多的信息才能实现。 – Phil