2013-11-15 8 views
0

Есть ли способ обновить несколько строк данных, когда данные поступают из результата CFQuery? В настоящее время этот запуск <cfquery> несколько раз. Есть ли способ сделать это в одной операции uqery?Обновление нескольких строк из набора записей cfquery

<cfloop query=loc.fixItems> 
    <cfset loc.count++> 
    <cfset var categoryName = loc.fixItems.categoryName> 


    <cfquery> 
     update items 
     set code = <cfqueryparam value="#code#"> 
     where id = <cfqueryparam value="#itemId#"> 
    </cfquery> 
</cfloop> 

Это может работать несколько раз и накладывать большую нагрузку на сервер.

+0

Если нужно запустить несколько раз, то это может надлежать вас сделать что-то о предотвращении повторения проблемы в первую очередь. Тогда вам нужно будет сделать это только один раз. –

ответ

0

Загрузка данных в переменную XML и обновление наливом

<cfsavecontent variables="xmlData"> 
<ul class="xoxo"> 
    <cfoutput query="loc.fixItems"> 
    <li><b>#xmlformat(id)#</b> <code>#code#</code></li> 
    </cfoutput> 
</ul> 
</cfsavecontent> 

<!--- 
<cfoutput>#xmlData#</cfoutput> 
---> 

<cfquery> 
DECLARE @xmlData xml = <cfqueryparam cfsqltype="CF_SQL_varchar" value="#xmlData#"> 


; 
WITH Data (id, code) AS (
    SELECT tbl.Col.value('b[1]','varchar(20)') AS ID, 
    tbl.Col.value('code[1]','varchar(50)') AS Code 
    FROM @xmlData.nodes('/ul/li') tbl(Col) 
    ) 

UPDATE items 
    SET items.code = Data.code 
FROM items 
INNER JOIN Data 
    ON items.id = Data.id  
</cfquery> 
1

Вы должны быть в состоянии поставить петлю внутри cfquery

<cfquery> 
    <cfloop query=loc.fixItems> 
    <cfset loc.count++> 
    <cfset var categoryName = loc.fixItems.categoryName>  
    update items 
    set code = <cfqueryparam value="#code#"> -- code needs to be dynamic 
    where id = <cfqueryparam value="#itemId#">; -- itemId needs to be dynamic 
    </cfloop> 
</cfquery> 
+0

Кажется, что каждый раз он будет иметь одинаковое значение кода. –

+1

Дэн - Не знаю, почему ты так говоришь. 'code' и' itemID' кажутся столбцами в запросе, поэтому значения будут меняться на каждой итерации. – Leigh

+1

В [исходном коде] (http://stackoverflow.com/questions/20003614/coldfusion-outofmemoryerror-cf9-wheels#comment29791546_20003614) они являются аргументами функции, но передаются из запроса. Определение области видимости должно уточнить намерение и устранить необходимость в комментариях, и в то время как на эту тему ... TSQL использует '--' для комментариев линии; не уверен, что поддерживается '//'. –

Смежные вопросы