1

Access DB のレコードを更新するために CFLOOP を使用するにはどうすればよいですか? 以下のコードを使用してみましたが、インクリメントではなく重複した値が得られるようです

私のコード:

<cfloop index="i" from="1" to="3">
<cfquery name="query" datasource="datasource">
    update mytable
    set
    columnB = #i#
    where columnA = 'a'                                          
   </cfquery>
</cfloop>

columnB の下のレコードの出力 = すべて番号 3、1、2、3 である必要があります

私の食卓はこんな感じ・・・。

Column A|ColumnA1|ColumnB
A         A        
A         B
A         C

列 A と A1 は、前の CFLOOP と SQL 挿入で埋められます。

4

1 に答える 1

6

更新を実行するたびに columnA = 'a' を持つすべてのレコードを更新しています。一度に複数の行を更新するのをやめるには、where 句にさらに条件が必要です。

次のコードのように、cfquery の結果属性を使用すると、更新された行数を簡単に確認できます。

<cfloop index="i" from="1" to="3">
<cfquery name="query" datasource="datasource" result='updated'>
    update mytable
    set
    columnB = #i#
    where columnA = 'a'                                          
   </cfquery>
   <cfdump var='#updated#' />
</cfloop>

更新: 更新された質問を考えると、更新されたクエリの例はそのように見えるかもしれません。 columnA と ColumnA1 の組み合わせが行を一意にするからです。

<cfloop index="i" from="1" to="3">
<cfquery name="query" datasource="datasource" result='updated'>
    update mytable
    set
    columnB = #i#
    where columnA = 'a'      
    AND ColumnA1 = <cfqueryparam value='#i#' />                                    
   </cfquery>
   <cfdump var='#updated#' />
</cfloop>
于 2013-02-06T18:36:58.037 に答える