尝试使用ColdFusion MX 7更新mysql表

时间:2012-03-22 16:27:24

标签: mysql sql coldfusion coldfusion-7

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

1 个答案:

答案 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>