如何使用ColdFusion同时更新所有行中的数据

时间:2011-05-20 03:44:30

标签: sql oracle coldfusion

我想问一下如何同时更新所有行中的数据。这是我的SQL:

<cfloop index="#form.ppp_id#">
    <cfquery name="viewPoint" datasource="#application.DataSource#">
        update PCRS_PHOTOPOINT set PPP_POINT_FROM = #form.point_from#, 
        PPP_POINT_UNTIL = #form.point_until#,
        PPP_UPDATE_DATE = SYSDATE, PPP_ICONS_NAME = '#form.icons_name#' 
        where PPP_ID = #form.ppp_id#
    </cfquery>
</cfloop>

我收到了这个错误:

  

标签'CFLOOP'的属性验证错误

2 个答案:

答案 0 :(得分:1)

根本不需要使用循环。您可以使用SQL的in运算符而不是=来一次更新值列表,而不是在循环中执行SQL语句。此外,正如其他人已经提到的那样,您最好使用cfqueryparam而不是将用户提供的字符串直接传递给数据库。

<cfquery name="viewPoint" datasource="#application.DataSource#">
  update PCRS_PHOTOPOINT set
    PPP_POINT_FROM = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.point_from#">,
    PPP_POINT_UNTIL = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.point_until#">,
    PPP_UPDATE_DATE = SYSDATE,
    PPP_ICONS_NAME = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.icons_name#">
  where PPP_ID in (<cfqueryparam list="yes" cfsqltype="cf_sql_integer" value="#form.ppp_id#">)
</cfquery>

答案 1 :(得分:0)

你应该这样做:

<cfloop list="#form.ppp_id#" index="iItems">
    <cfquery name="viewPoint" datasource="#application.DataSource#">
        update PCRS_PHOTOPOINT set PPP_POINT_FROM = "#form.point_from#", 
        PPP_POINT_UNTIL = "#form.point_until#",
        PPP_UPDATE_DATE = SYSDATE, PPP_ICONS_NAME = "#form.icons_name#" 
        where PPP_ID = #iItems#
    </cfquery>
</cfloop>

让我知道它是怎么回事。