具有复杂更新语句的cfquery问题

时间:2009-12-23 03:10:44

标签: coldfusion cfquery

我正在尝试使用cfquery(如下面的

)触发更新查询
   <cfquery name = "UpdateRecord"   
            dataSource = #DATASOURCE#   
            username = #DBUSER#   
            password = #DBPASSWORD# 
            result="updateResult" >  
        update table1 
set field1=( select field1 from table2 where field3='Some Value')
 where field4='someothervalue'
     </cfquery> 
    <cfdump var="#UpdateResult#">

但是,当我执行此页面时,页面没有加载,在状态栏中我可以看到它的加载很长时间。

但如果我使用任何简单的更新查询,如

update table1 set field1='abc' where field4='someothervalue'

然后它工作正常

任何人都知道如何使用cfquery执行上述查询?

由于

3 个答案:

答案 0 :(得分:2)

如果您可以尝试使用cfqueryparam作为您的值,则不必使用PreserveSingleQuotes。它还可以防止SQL注入。

答案 1 :(得分:1)

您是否尝试在PreserveSingleQuotes中包装更新?

 <cfquery name = "UpdateRecord"   
        dataSource = #DATASOURCE#   
        username = #DBUSER#   
        password = #DBPASSWORD# 
        result="updateResult" >  
   #PreserveSingleQuotes(update table1 set field1=( select field1 from
   table2 where Field3='Some Value') where field4='someothervalue')#
 </cfquery> 

答案 2 :(得分:0)

您确定您的subselect语句返回1行。这取决于您运行的RDMS,但我很确定并非所有数据库都支持此功能。我首先尝试直接在您的数据库上运行查询,看它是否正确运行。

您可以通过在查询末尾添加限制1来强制sql仅返回1行,或者如果您的数据库不支持在汇总中包装field1。

SELECT MAX(field1) FROM table2 WHERE field3 = 'Some Value'

注意:如果您的String值是来自用户的参数,则应确保使用cfqueryparam来防止SQL注入。