如何从ColdFusion中的查询对象获取SQL?

Kip*_*Kip 16 coldfusion

如何获取用于生成cfquery对象的SQL?如果我cfdump该对象,它显示它具有"SQL"属性,其中包含实际查询.打开调试对我没有帮助,因为我正在进行API调用,因此输出不是HTML,调试信息会破坏它.我只是想调试正在执行的查询.

<cfquery name="tableElements" datasource="TestSQLServer">
SELECT * FROM tableElements
</cfquery>

<cfdump var="#tableElements#" /> <!--- Shows object having "SQL" property --->
<cfoutput>SQL: #tableElements.SQL#</cfoutput> <!--- Error: Element SQL is undefined in TABLEELEMENTS. --->
Run Code Online (Sandbox Code Playgroud)

Tod*_*arp 30

在cfquery中添加"结果"属性.SQL位于结果结构中,而不是查询变量中.

  • 您还可以从技术上深入了解Java并获取它:<cfdump var ="#q.getMetadata().getExtendedMetaData().sql#"/> (12认同)

Ada*_*tle 19

<cfquery name="tableElements" datasource="TestSQLServer" result="r">
SELECT * FROM tableElements
</cfquery>

<cfdump var="#tableElements#" /> <!--- Shows object having "SQL" property --->
<cfoutput>SQL: #r.SQL#</cfoutput>
Run Code Online (Sandbox Code Playgroud)


Luk*_*uke 7

我个人喜欢有一些SQL,其中插入了所有参数(而不是?问号).这样我就可以复制并粘贴SQL来对数据库运行查询.为此,我得到一个结果(如其他注释中所述),然后使用此函数...

<cffunction name="getRealSQL" returntype="string">
    <cfargument name="qryResult" type="any">
    <cfset realSQL = arguments.qryResult.sql>
    <cfloop array="#arguments.qryResult.sqlParameters#" index="a">
        <cfscript>
            if (NOT isNumeric(a)) a = "'#a#'";
            realSQL = Replace(realSQL, "?", a);
        </cfscript>
    </cfloop>
    <cfreturn realSQL>
</cffunction>
Run Code Online (Sandbox Code Playgroud)