我试图将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,但为什么会这样。我觉得我错过了一些非常简单但却看不到的东西。
答案 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#"}
);