寻找一种更有效的方法来根据查询结果插入记录。
示例:
<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中,但每次都会遇到错误。
更新:
根据Dan的例子,这最终为我工作了:
<cfquery datasource = "dsn">
insert into newTable
(fID, field1, field2, etc)
select '#newID#', field1, field2, etc -- the sql from q1
</cfquery>
答案 0 :(得分:0)
如果初始查询和插入位于同一数据库中,则可能只需要一个查询。这就是你现在正在做的事情;
<cfquery name="q1" datasource = "dsn">
select field1, field2, etc
</cfquery>
<cfoutput query="q1">
<cfquery datasource = "dsn">
insert into newTable
(field1, field2, etc)
values
(#field1#, #field2#, #etc#)
</cfquery.
</cfoutput>
你可以做的是:
<cfquery datasource = "dsn">
insert into newTable
(field1, field2, etc)
select field1, field2, etc -- the sql from q1
</cfquery>
根据许多事情,如果数据库不同,这种方法甚至可用。
这是一个建议。您提到将cfoutput放在查询中。这是您可能没有想到的方法。使用与上面相同的q1,
<cfquery datasource="dsn">
insert into newTable
(field1, field2, etc)
select null, null, etc
from newTable
where 1=2
<cfloop query="q1">
union
select #q1.field1[currentrow]#, #q1.field2[currentrow]#, etc
from newTable
</cfloop>
</cfquery>
你必须尝试这种方法。我看到它的运行速度比你现在的速度要快,而且我也看到它运行得比较慢。
最重要的是,你有选择,包括你当前的方法。有时候我觉得最适合眼前的情况。