1

我一直在尝试使用 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>
4

1 回答 1

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>
于 2012-03-22T16:32:27.363 回答