查询遭遇的ColdFusion查询更新

时间:2017-02-10 19:39:09

标签: coldfusion

我试图将cftag查询转换为cfscript查询。

以下是cftag版本:

    <cfquery name="local.qUpdateCRDRMemo" datasource="#Application.dsn.orionTesting#">
UPDATE is_data.crdr_memo
                SET
                    ps_speed_type = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#local.valid.operatingUnit#";,
                    ps_account_no = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#local.valid.account#";,
                    ps_class = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#local.valid.class#";,
                    requested_by = <cfqueryparam cfsqltype="CF_SQL_NUMERIC" value="#local.requestorId#" null="#utils.isNull(local.requestorId)#";,
                    updated_by = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#utils.getUserInfo()#";
                WHERE crdr_memo_id = <cfqueryparam cfsqltype="CF_SQL_NUMERIC" value="#local.adjustment#" null="#utils.isNull(local.adjustment)#";
            </cfquery>

这是cfscript

<cfscript>
local.qUpdateCRDRMemo = queryExecute(
                "UPDATE is_data.crdr_memo
                SET
                    ps_speed_type = [local].valid.operatingUnit,
                    ps_account_no = [local].valid.account,
                    ps_class = [local].valid.class,
                    requested_by = [local].requestorId,
                    updated_by = utils.getUserInfo()
                WHERE crdr_memo_id = [local].adjustment",
                {},
                {dbtype="query"}
                );
</cfscript>

我收到错误:java.sql.SQLException:
查询查询语法错误。
遇到了#34;更新。

根据我的理解,它看到UPDATE并认为它试图成为ColdFusion和SQL,但为什么会这样。我觉得我错过了一些非常简单但却看不到的东西。

1 个答案:

答案 0 :(得分:3)

使用标签查询数据库:

<cfquery name="local.qUpdateCRDRMemo" datasource="#Application.dsn.orionTesting#">
    SQL HERE
</cfquery>

使用脚本查询数据库:

var myQuery = new Query(datasource="#Application.dsn.orionTesting#", sql="
    SQL HERE
");
var myResult = myQuery.execute().getResult();

在带有标记的现有查询上运行查询查询(QoQ):

<cfquery name="local.qUpdateCRDRMemo" dbtype="query">
    SELECT * FROM existingQueryName
</cfquery>

在脚本中对现有查询运行查询查询:

var myQuery = new Query(dbtype="query", QoQSrcTable="#existingQueryName#", sql="
    SELECT * FROM QoQsrcTable
");
var myResult = myQuery.execute().getResult();

使用queryService:

在脚本中对现有查询运行查询查询
var myQuery = new Query();
var sql = "SELECT * FROM QoQsrcTable";
// note that for queryService, you need to use the existing query VARIABLE, not its name
var myResult = queryService.execute(dbtype="query",
    qoqSrcTable=existingQueryVariable, sql=sql).getResult();

您可以使用不同的语法,但这通常是我的方法。你的问题的答案是,你的脚本和标签&#34;版本&#34;没有做同样的事情。 dbtype attribute表示查询是针对外部数据源还是本地查询运行。您的代码示例正在命中外部数据源。您的脚本示例正在尝试针对本地查询运行。

Query of Queries是非常强大的,所以如果你不了解它,我会阅读它,因为它会揭示正在发生的事情以及它为什么不是按预期工作。

简单的回答是删除dbtype="query"并将数据源添加到脚本版本。

   ... WHERE crdr_memo_id = [local].adjustment"
   , {}
   , {datasource="#Application.dsn.orionTesting#"}
 );