Попытка обновить таблицу MySQL с ColdFusion MX 7
Я пытался обновить таблицу в MySQL 5.0 с Coldfusion MX 7. Но запрос только обновляет / добавляет первые записи и не обновляет / добавляет другие 60000 записей.
<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 ответ
Решение
Вам нужно будет использовать цикл:
<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>