2017-02-10 47 views
-1

我試圖將cftag查詢轉換成cfscript查詢。ColdFusion遇到的查詢查詢UPDATE

這裏是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中:
查詢查詢語法錯誤。
遭遇「UPDATE。

據我瞭解它看到更新,並認爲這是試圖既ColdFusion和SQL,但爲什麼是這樣。我覺得我失去了一些東西超級簡單,但就是不能看到它。

+3

你通過'DBTYPE =「查詢」' –

+0

@BernhardDöbler謝謝,我想通了,這是爲什麼造成錯誤,但什麼應該是什麼? –

+2

這應該是數據源'{datasource = Application.dsn.orionTesting} –

回答

2

查詢數據庫與標籤:

<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(); 

要與標籤上的現有的查詢運行查詢的查詢(環比):

<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(); 

有不同的語法你可以做,但這通常是我如何做到的。你的問題的答案是,你的腳本和標籤「版本」不是做同樣的事情。 dbtype attribute指示查詢是針對外部數據源還是本地查詢運行。您的代碼示例正在打擊外部數據源。您的腳本示例正在嘗試針對本地查詢運行。

Query of Queries是非常強大的,所以如果你不知道它,我會閱讀它,因爲它會揭示什麼正在發生以及爲什麼它不按預期工作。

雖然簡單的答案是刪除dbtype="query"並將數據源添加到您的腳本版本。

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

好的解釋。也可以使用[queryExecute()]添加一個示例(https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-m-r/queryexecute.html)。新的核心函數對基於cfc的新Query()進行了一些改進。 – Leigh

+0

這是cf2016嗎?我仍然在10. – Leeish

+0

嘿。剛剛查看了文檔。它被添加到CF11中。 – Leigh