2012-03-22 1 views
1

Я пытаюсь обновить таблицу в MySQL 5.0 с помощью Coldfusion MX 7. Но запрос только обновляет/добавляет первые записи и не обновляет/не добавляет другие 60 000 записей.Попытка обновить таблицу mysql с помощью ColdFusion MX 7

<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).


EDIT

оригинальный вариант ответа рекомендуется следующее, но очевидно, что это не достаточно в ситуации, связанной с отдельными серверами баз данных.

<cfquery name="update" datasource="patrons"> 
    REPLACE INTO 
    patrondailyusecounttotals (PATRON.PATRON_ID, HISTORICAL_CHARGES) 
    SELECT 
    PATRON_ID, HISTORICAL_CHARGES 
    FROM 
    PATRON 
</cfquery> 
+0

Спасибо, но я не уверен, как это сделать, это таблица оракула на одной машине и таблица mysql на другой машине. Я использую coldfusion, потому что это единственный способ, с помощью которого можно объединить данные с двух сайтов. – schwartzray

+0

@schwartzray Ах! Это важная информация. :) Я не понимал, что это два отдельных источника данных. Хорошо, тогда вам понадобится петля. См. Измененный ответ. – Tomalak

+0

Большое спасибо! Это сделал трюк!/Ray – schwartzray