我一直在尝试使用Coldfusion MX 7更新MySQL 5.0中的表。但是查询只更新/添加第一条记录,而不更新/添加其他60,000条记录。
<cfquery name="count" datasource="voyager">
SELECT
PATRON.PATRON_ID,
PATRON.HISTORICAL_CHARGES,
PATRON.HISTORICAL_BOOKINGS,
PATRON.HISTORICAL_DISTRIBUTIONS,
PATRON.HISTORICAL_SHORT_LOANS,
PATRON.HISTORICAL_CHARGES_UB,
PATRON.HISTORICAL_REQUESTS_UB
FROM PATRON
</cfquery>
<cfquery name="update" datasource="patrons">
<cfoutput>
REPLACE INTO patrondailyusecounttotals (PATRON_ID, HISTORICAL_CHARGES)
VALUES ('#count.PATRON_ID#', '#count.HISTORICAL_CHARGES#')
</cfoutput>
</cfquery>
答案 0 :(得分:1)
您需要使用循环:
<cfquery name="count" datasource="voyager">
SELECT
PATRON.PATRON_ID,
PATRON.HISTORICAL_CHARGES,
PATRON.HISTORICAL_BOOKINGS,
PATRON.HISTORICAL_DISTRIBUTIONS,
PATRON.HISTORICAL_SHORT_LOANS,
PATRON.HISTORICAL_CHARGES_UB,
PATRON.HISTORICAL_REQUESTS_UB
FROM
PATRON
</cfquery>
<cfloop query="count">
<cfquery name="update" datasource="patrons">
REPLACE INTO patrondailyusecounttotals (PATRON_ID, HISTORICAL_CHARGES)
VALUES (
<cfqueryparam value="#PATRON_ID#" cfsqltype="CF_SQL_VARCHAR">,
<cfqueryparam value="#HISTORICAL_CHARGES#" cfsqltype="CF_SQL_VARCHAR">
)
</cfoutput>
</cfloop>
请注意,此处使用<cfqueryparam>
是建议的方法。它将大大加快“内部查询”的速度,因为在第一个循环之后的每个循环迭代中,只有参数值被传输到服务器(而不是每次都传输完整的SQL代码)。
修改强>
答案的原始版本建议如下,但显然在涉及单独数据库服务器的情况下这是不够的。
<cfquery name="update" datasource="patrons">
REPLACE INTO
patrondailyusecounttotals (PATRON.PATRON_ID, HISTORICAL_CHARGES)
SELECT
PATRON_ID, HISTORICAL_CHARGES
FROM
PATRON
</cfquery>