在查询上更新群集内的cfquery



我将遍历Values表列值中的所有记录,并将任何绝对url转换为相对url。我得到这个错误

[Macromedia][SQLServer JDBC Driver][SQLServer]Incorrect syntax near '='.

在代码块的第三到最后一行:

<cfquery name="getVals" datasource="#dataBase#">
  Select vals
  FROM Values
</cfquery>
<cfloop 
  query = "getVals">
  <cfset val=#vals#>
    <cfset valEdited= REReplace(
      val, 
      '"(https?://)?(www.)?(example.com)(/)?"', 
      "'index.php'", 
      'ALL'
      )>
    <cfquery name="update" datasource="#dataBase#">
      UPDATE   Values
      SET      vals = <cfqueryPARAM value = #valEdited#>
      WHERE    ID = <cfqueryPARAM value = #getVals.currentRow#>
    </cfquery>
</cfloop>

有什么好主意吗?

我要看的第一件事是在ValEdited的CFSET末尾有一个分号。它会先爆炸的

然后检查你的代码,看看它是否给你同样的错误。

您可能想要考虑的最佳实践是,仅在输出值时使用#…所以

<cfset val = getVals.vals> 

是充分的。

下一个我要看的是你的where语句。这假设您的所有值都具有ID, 1到表中记录的数量。如果不是这样,您可能需要将其更新为

where ID = #getVals.ID#

希望这对你有帮助。当我把它写出来的时候,其他人几乎都说了同样的话:P

我个人不会直接更新查询列的值。对我来说,这让我搞不清楚到底发生了什么。我经常使用的方法是使用QueryAddColumn()向查询添加另一列。

http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_m-r_16.html

这使您不仅可以在查询中作为新列进行所需的更改,而且还可以保留原始列,以便您可以更轻松地调试。要添加新列,只需执行:

<cfquery name="getVals" datasource="#dataBase#">
  Select vals
  FROM Values
  order by id
</cfquery>
<cfset newVals = []>
<cfloop query="getVals">
    <cfset temp = REReplace(
      val, 
      '"(https?://)?(www.)?(example.com)(/)?"', 
      "'index.php'", 
      'ALL'
      )>
    <cfset ArrayAppend(newVals, temp)>
</cfloop>
<cfset QueryAddColumn(getVals, "newVals", "Varchar", newVals)>

最新更新