尋找更有效的方式來根據查詢結果插入記錄。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