コピー可能なクエリ行を作成するために、このヘルパー関数を最終的に作成しました。
<cffunction name="limnSQLDump" output="no" access="public" returntype="string">
<cfargument name="sql" required="yes" type="string">
<cfargument name="params" required="yes" type="string">
<cfset var arrParam = ListToArray(arguments.params, ' , ', false, true)> <!--- Arrayify Dat Param String --->
<cfset var sub = StructNew()>
<cfset var objParam = StructNew()>
<cfloop from="1" to="#ArrayLen(arrParam)#" index="i"> <!--- Loop through each param string --->
<cfset arrParam[i] = REReplace(arrParam[i], '\(param \d+\) = \[([^\]]+)\]', '\1', 'all')> <!--- Scoop out the meat --->
<cfset sub = REFind("([^=, ]+)='([^']*)'", arrParam[i], 1, true)> <!--- Prep For Surgery --->
<cfset objParam = StructNew()> <!--- Preheat oven --->
<cfloop condition="#sub.pos[1]#"> <!--- Surgically get Key/Value --->
<cfset objParam[Mid(arrParam[i], sub.pos[2], sub.len[2])] = Mid(arrParam[i], sub.pos[3], sub.len[3])>
<cfset sub = REFind("([^=, ]+)='([^']*)'", arrParam[i], sub.pos[1]+sub.len[1], true)>
</cfloop>
<!--- Serve (Feeds 3) --->
<cfset sql = REReplace(sql, '\(param '&i&'\)', (objParam.class NEQ 'java.lang.Integer' ? "'"&objParam.value&"'" : objParam.value))>
</cfloop>
<cfreturn sql>
</cffunction>
これに落ち着く前に、無数のさまざまなルートを自分自身で経験したので、フィードバックをいただければ幸いです(具体的なものから抽象的なものへ、またその逆へ)。最後に、param 文字列全体を配列に分割し (基本的には配列です)、正確なパラメーターを正規表現し、文字列全体をそれで置き換えてから、パラメーターをループしてオブジェクトを同等にすることにしました。 SQL 文字列を置換するときに、REReplace で明確に参照できます。
<cfset arrParam[i] = Evaluate("{"&arrParam[i])&"}">
個人的には、括弧を除いて、param の内容が基本的にインライン オブジェクトであることを考えると、単純に似たようなことができればよかったのにと思います。